From 701ca56bccf7d4e717288e1569fb505b3f8e2c2a Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Mon, 11 Sep 2017 21:21:35 +0300 Subject: [PATCH] runnerw: support unicode arguments & escape child process command line properly (IDEA-176490, IDEA-171368) --- bin/win/runnerw.exe | Bin 113152 -> 119296 bytes native/runner/runnerw/runnerw.cpp | 172 ++++++++++++++++-------------- 2 files changed, 89 insertions(+), 83 deletions(-) diff --git a/bin/win/runnerw.exe b/bin/win/runnerw.exe index a4f4a81400b1f7d81f5c70fc90b71f0351651118..e4090f14cd9c66cbf5e1761be11a0f0dca3a85ea 100644 GIT binary patch delta 45686 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 #include -#include #include #include -void PrintUsage() { +void PrintUsageAndExit() { printf("Usage: runnerw.exe [/C] app [args]\n"); printf("app [args] Specifies executable file, arguments.\n"); printf("/C Creates a child process with new visible console.\n"); @@ -19,23 +18,28 @@ void PrintUsage() { exit(0); } +struct ChildParams { + BOOL createNewConsole; + LPWSTR commandLine; +}; + void ErrorMessage(char *operationName) { - LPVOID msg; + LPWSTR msg; DWORD lastError = GetLastError(); - FormatMessage( + FormatMessageW( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, lastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPSTR)&msg, + (LPWSTR)&msg, 0, NULL); if (msg) { - fprintf(stderr, "%s failed with error %d: %s\n", operationName, lastError, msg); + fprintf(stderr, "runnerw.exe: %s failed with error %d: %ls\n", operationName, lastError, msg); LocalFree(msg); } else { - fprintf(stderr, "%s failed with error %d (no message available)\n", operationName, lastError); + fprintf(stderr, "runnerw.exe: %s failed with error %d (no message available)\n", operationName, lastError); } fflush(stderr); } @@ -127,15 +131,6 @@ DWORD WINAPI scanStdinThread(void *param) { return 0; } -bool hasEnding(std::string const &fullString, std::string const &ending) { - if (fullString.length() > ending.length()) { - return (0 == fullString.compare(fullString.length() - ending.length(), - ending.length(), ending)); - } else { - return false; - } -} - BOOL attachChildConsole(PROCESS_INFORMATION const &childProcessInfo) { if (!FreeConsole()) { ErrorMessage("FreeConsole"); @@ -158,44 +153,75 @@ BOOL attachChildConsole(PROCESS_INFORMATION const &childProcessInfo) { return FALSE; } -int main(int argc, char * argv[]) { - if (argc < 2) { - PrintUsage(); +BOOL isCommandLineMatchingArgs(LPWSTR commandLine, LPWSTR *expectedArgv, int expectedArgc) { + int argc; + LPWSTR *argv = CommandLineToArgvW(commandLine, &argc); + if (argv == NULL) { + return FALSE; } + if (argc != expectedArgc) { + LocalFree(argv); + return FALSE; + } + for (int i = 0; i < argc; i++) { + if (wcscmp(argv[i], expectedArgv[i]) != 0) { + LocalFree(argv); + return FALSE; + } + } + LocalFree(argv); + return TRUE; +} - std::string app(""); - std::string args(""); - BOOL createConsoleFlag = FALSE; - for (int i = 1; i < argc; i++) { - if (i == 1) { - std::string flag(argv[1]); - if (flag == "/C" || flag == "/c") { - createConsoleFlag = TRUE; - if (argc < 3) { - PrintUsage(); - } - app = argv[2]; - continue; +LPWSTR copy(LPCWSTR str) { + LPWSTR copy = _wcsdup(str); + if (copy == NULL) { + ErrorMessage("Storage cannot be allocated for string copy"); + exit(1); + } + return copy; +} + +ChildParams parseChildParams() { + LPWSTR commandLine = GetCommandLineW(); + int argc; + LPWSTR *argv = CommandLineToArgvW(commandLine, &argc); + if (argv == NULL) { + PrintUsageAndExit(); + } + if (argc <= 1) { + LocalFree(argv); + PrintUsageAndExit(); + } + ChildParams result = {FALSE, NULL}; + result.createNewConsole = wcscmp(argv[1], L"/C") == 0 || wcscmp(argv[1], L"/c") == 0; + int childArgvStartInd = result.createNewConsole ? 2 : 1; + if (childArgvStartInd >= argc) { + LocalFree(argv); + PrintUsageAndExit(); + } + std::wstring stdCmdLine(commandLine); + for (size_t i = 0; i < stdCmdLine.length(); i++) { + if (iswspace(stdCmdLine[i])) { + LPWSTR subCmdLine = &commandLine[i + 1]; + if (isCommandLineMatchingArgs(subCmdLine, &argv[childArgvStartInd], argc - childArgvStartInd)) { + result.commandLine = copy(subCmdLine); + break; } - app = argv[1]; - } - if (args.length() > 0) { - args += " "; - } - if (strchr(argv[i], ' ')) { - args += "\""; - args += argv[i]; - args += "\""; - } else { - args += argv[i]; } } + LocalFree(argv); + if (result.commandLine == NULL) { + fwprintf(stderr, L"runnerw.exe: cannot determine child command line from its parent:\n%ls\n", commandLine); + exit(1); + } + return result; +} -// if (app.length() == 0) { -// PrintUsage(); -// } +int main(int argc, char * argv[]) { + ChildParams childParams = parseChildParams(); - STARTUPINFO si; + STARTUPINFOW si; SECURITY_ATTRIBUTES sa; PROCESS_INFORMATION pi; @@ -205,7 +231,7 @@ int main(int argc, char * argv[]) { sa.nLength = sizeof(SECURITY_ATTRIBUTES); - BOOL inheritHandles = !createConsoleFlag; + BOOL inheritHandles = !childParams.createNewConsole; sa.bInheritHandle = inheritHandles; if (!CreatePipe(&newstdin, &write_stdin, &sa, 0)) { @@ -213,18 +239,16 @@ int main(int argc, char * argv[]) { exit(0); } - GetStartupInfo(&si); + GetStartupInfoW(&si); - DWORD processFlag = CREATE_DEFAULT_ERROR_MODE; + DWORD processFlag = CREATE_DEFAULT_ERROR_MODE | CREATE_UNICODE_ENVIRONMENT; BOOL hasConsoleWindow = GetConsoleWindow() != NULL; - if (hasConsoleWindow && !createConsoleFlag) { - processFlag |= CREATE_NO_WINDOW; - } - - if (createConsoleFlag) - { + if (childParams.createNewConsole) { processFlag |= CREATE_NEW_CONSOLE; } + else if (hasConsoleWindow) { + processFlag |= CREATE_NO_WINDOW; + } if (inheritHandles) { si.dwFlags = STARTF_USESTDHANDLES; @@ -234,37 +258,17 @@ int main(int argc, char * argv[]) { si.hStdInput = newstdin; } - if (hasEnding(app, std::string(".bat"))) { -// in MSDN it is said to do so, but actually that doesn't work -// args = "/c " + args; -// app = "cmd.exe"; - } else { - app = ""; - } - - - char* c_app = NULL; - - if (app.size()>0) { - c_app = new char[app.size() + 1]; - strcpy(c_app, app.c_str()); - } - - - char* c_args = new char[args.size() + 1]; - strcpy(c_args, args.c_str()); - - if (createConsoleFlag) - { - si.lpTitle = c_args; + if (childParams.createNewConsole) { + si.lpTitle = childParams.commandLine; } if (!SetConsoleCtrlHandler(NULL, FALSE)) { ErrorMessage("Cannot restore normal processing of CTRL+C input"); } - if (!CreateProcess( - c_app, - c_args, + + if (!CreateProcessW( + NULL, + childParams.commandLine, NULL, NULL, inheritHandles, @@ -278,7 +282,7 @@ int main(int argc, char * argv[]) { CloseHandle(write_stdin); exit(0); } - if (hasConsoleWindow || createConsoleFlag) { + if (hasConsoleWindow || childParams.createNewConsole) { attachChildConsole(pi); } if (!SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE)) { @@ -296,6 +300,8 @@ int main(int argc, char * argv[]) { } } + free(childParams.commandLine); + GetExitCodeProcess(pi.hProcess, &exitCode); CloseHandle(pi.hThread);