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.
This commit is contained in:
parent
7c28ae7e45
commit
6f1ebacd39
|
@ -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;
|
||||
}
|
||||
args[argIndex++] = const_cast <char*> (processName.c_str());
|
||||
|
||||
foreach (const string &arg, arguments)
|
||||
for (list<string>::const_iterator it = arguments.begin(); it != arguments.end(); it++)
|
||||
{
|
||||
argsCopy[argIndex++] = arg;
|
||||
args[argIndex++] = const_cast <char*> (it->c_str());
|
||||
}
|
||||
|
||||
for (int i = 0; i < argIndex; i++)
|
||||
{
|
||||
args[i] = const_cast <char*> (argsCopy[i].c_str());
|
||||
}
|
||||
|
||||
args[argIndex] = nullptr;
|
||||
|
||||
if (inputData)
|
||||
|
|
Loading…
Reference in New Issue