BUG: Robustly handle failure of FormatMessage. See bug#3471.
This commit is contained in:
parent
97e07dc162
commit
5341711012
|
@ -442,26 +442,26 @@ static BOOL RealPopenCreateProcess(const char *cmdstring,
|
||||||
free(s1);
|
free(s1);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
LPVOID lpMsgBuf;
|
|
||||||
|
|
||||||
FormatMessage(
|
|
||||||
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
|
||||||
NULL,
|
|
||||||
GetLastError(),
|
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
|
||||||
(LPTSTR) &lpMsgBuf,
|
|
||||||
0,
|
|
||||||
NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
// Free the buffer.
|
|
||||||
|
|
||||||
char* str = strcpy(new char[strlen((char*)lpMsgBuf)+1], (char*)lpMsgBuf);
|
|
||||||
LocalFree( lpMsgBuf );
|
|
||||||
|
|
||||||
output += "CreateProcessError: ";
|
output += "CreateProcessError: ";
|
||||||
output += str;
|
{
|
||||||
|
/* Format the error message. */
|
||||||
|
char message[1024];
|
||||||
|
DWORD original = GetLastError();
|
||||||
|
DWORD length = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
|
||||||
|
FORMAT_MESSAGE_IGNORE_INSERTS, 0, original,
|
||||||
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
|
message, 1023, 0);
|
||||||
|
if(length < 1)
|
||||||
|
{
|
||||||
|
/* FormatMessage failed. Use a default message. */
|
||||||
|
_snprintf(message, 1023,
|
||||||
|
"Process execution failed with error 0x%X. "
|
||||||
|
"FormatMessage failed with error 0x%X",
|
||||||
|
original, GetLastError());
|
||||||
|
}
|
||||||
|
output += message;
|
||||||
|
}
|
||||||
output += "\n";
|
output += "\n";
|
||||||
output += "for command: ";
|
output += "for command: ";
|
||||||
output += s2;
|
output += s2;
|
||||||
|
@ -471,7 +471,6 @@ static BOOL RealPopenCreateProcess(const char *cmdstring,
|
||||||
output += path;
|
output += path;
|
||||||
}
|
}
|
||||||
output += "\n";
|
output += "\n";
|
||||||
delete [] str;
|
|
||||||
free(s2);
|
free(s2);
|
||||||
free(s1);
|
free(s1);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
Loading…
Reference in New Issue