From 6f1ebacd398948712928b17c7792193c411be927 Mon Sep 17 00:00:00 2001 From: Alexander Karzhenkov Date: Thu, 6 Jun 2019 14:41:42 +0500 Subject: Some cleanup related to "Invalid characters..." on mount issue. (#453) * Revert previous commit * Fix "Invalid characters..." issue by not using "foreach" macro The "foreach" macro creates a copy of the container. This copy is destroyed immediately after the iteration is completed. C-strings pointers passed to the local array were invalidated with destroying of "std::string"s contained in the copy. --- src/Platform/Unix/Process.cpp | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/src/Platform/Unix/Process.cpp b/src/Platform/Unix/Process.cpp index 4a7f9a15..ac8598f0 100644 --- a/src/Platform/Unix/Process.cpp +++ b/src/Platform/Unix/Process.cpp @@ -53,33 +53,13 @@ namespace VeraCrypt try { int argIndex = 0; - /* Workaround for gcc 5.X issue related to the use of STL (string and list) with muliple fork calls. - * - * The char* pointers retrieved from the elements of parameter "arguments" are no longer valid after - * a second fork is called. "arguments" was created in the parent of the current child process. - * - * The only solution is to copy the elements of "arguments" parameter in a local string array on this - * child process and then use char* pointers retrieved from this local copies before calling fork. - * - * gcc 4.x doesn't suffer from this issue. - * - */ - string argsCopy[array_capacity (args)]; if (!execFunctor) - { - argsCopy[argIndex++] = processName; - } - - foreach (const string &arg, arguments) - { - argsCopy[argIndex++] = arg; - } + args[argIndex++] = const_cast (processName.c_str()); - for (int i = 0; i < argIndex; i++) + for (list::const_iterator it = arguments.begin(); it != arguments.end(); it++) { - args[i] = const_cast (argsCopy[i].c_str()); + args[argIndex++] = const_cast (it->c_str()); } - args[argIndex] = nullptr; if (inputData) -- cgit v1.2.3