From: Alexandre Julliard julliard@winehq.org
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=58891 --- dlls/kernel32/tests/process.c | 48 +++++++++++++++++++++++++---------- dlls/kernelbase/process.c | 7 ++--- 2 files changed, 37 insertions(+), 18 deletions(-)
diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c index 563b4c923ed..08c620e5996 100644 --- a/dlls/kernel32/tests/process.c +++ b/dlls/kernel32/tests/process.c @@ -1070,10 +1070,7 @@ static void test_CommandLine(void) SetLastError(0xdeadbeef); ret = CreateProcessA(buffer, NULL, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); ok(!ret, "CreateProcessA unexpectedly succeeded\n"); - ok(GetLastError() == ERROR_PATH_NOT_FOUND || - broken(GetLastError() == ERROR_FILE_NOT_FOUND) /* Win9x/WinME */ || - broken(GetLastError() == ERROR_ACCESS_DENIED) /* Win98 */, - "Expected ERROR_PATH_NOT_FOUND, got %ld\n", GetLastError()); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, got %ld\n", GetLastError());
buffer2[0] = '\0';
@@ -1081,20 +1078,44 @@ static void test_CommandLine(void) SetLastError(0xdeadbeef); ret = CreateProcessA(buffer, buffer2, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); ok(!ret, "CreateProcessA unexpectedly succeeded\n"); - ok(GetLastError() == ERROR_PATH_NOT_FOUND || - broken(GetLastError() == ERROR_FILE_NOT_FOUND) /* Win9x/WinME */ || - broken(GetLastError() == ERROR_ACCESS_DENIED) /* Win98 */, - "Expected ERROR_PATH_NOT_FOUND, got %ld\n", GetLastError()); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, got %ld\n", GetLastError());
/* Test empty command line parameter. */ SetLastError(0xdeadbeef); ret = CreateProcessA(NULL, buffer2, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); ok(!ret, "CreateProcessA unexpectedly succeeded\n"); - ok(GetLastError() == ERROR_FILE_NOT_FOUND || - GetLastError() == ERROR_PATH_NOT_FOUND /* NT4 */ || - GetLastError() == ERROR_BAD_PATHNAME /* Win98 */ || - GetLastError() == ERROR_INVALID_PARAMETER /* Win7 */, - "Expected ERROR_FILE_NOT_FOUND, got %ld\n", GetLastError()); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError()); + + strcpy(buffer2, " " ); + SetLastError(0xdeadbeef); + ret = CreateProcessA(NULL, buffer2, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); + ok(!ret, "CreateProcessA unexpectedly succeeded\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError()); + strcpy(buffer2, " notepad.exe" ); + SetLastError(0xdeadbeef); + ret = CreateProcessA(NULL, buffer2, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); + ok(!ret, "CreateProcessA unexpectedly succeeded\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError()); + strcpy(buffer2, "\tnotepad.exe" ); + SetLastError(0xdeadbeef); + ret = CreateProcessA(NULL, buffer2, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); + ok(!ret, "CreateProcessA unexpectedly succeeded\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError()); + strcpy(buffer2, """" ); + SetLastError(0xdeadbeef); + ret = CreateProcessA(NULL, buffer2, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); + ok(!ret, "CreateProcessA unexpectedly succeeded\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError()); + strcpy(buffer2, "" "" ); + SetLastError(0xdeadbeef); + ret = CreateProcessA(NULL, buffer2, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); + ok(!ret, "CreateProcessA unexpectedly succeeded\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError()); + strcpy(buffer2, ""\t"" ); + SetLastError(0xdeadbeef); + ret = CreateProcessA(NULL, buffer2, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info); + ok(!ret, "CreateProcessA unexpectedly succeeded\n"); + ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", GetLastError());
strcpy(buffer, "doesnotexist.exe"); strcpy(buffer2, "does not exist.exe"); @@ -2733,6 +2754,7 @@ static void test_IsProcessInJob(void) ret = pIsProcessInJob(pi.hProcess, job, &out); ok(ret, "IsProcessInJob error %lu\n", GetLastError()); ok(out, "IsProcessInJob returned out=%u\n", out); + Sleep(100); test_assigned_proc(job, 0); test_accounting(job, 1, 0, 0);
diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c index e1c28fc67ed..f4a9a3aa5ae 100644 --- a/dlls/kernelbase/process.c +++ b/dlls/kernelbase/process.c @@ -114,15 +114,12 @@ static WCHAR *get_file_name( WCHAR *cmdline, WCHAR *buffer, DWORD buflen ) ret = cmdline; break; } + if (GetLastError() != ERROR_FILE_NOT_FOUND) break; if (!first_space) first_space = pos; if (!(*pos++ = *p++)) break; }
- if (!ret) - { - SetLastError( ERROR_FILE_NOT_FOUND ); - } - else if (first_space) /* build a new command-line with quotes */ + if (ret && first_space) /* build a new command-line with quotes */ { if (!(ret = HeapAlloc( GetProcessHeap(), 0, (lstrlenW(cmdline) + 3) * sizeof(WCHAR) ))) goto done;