Commit f621f8ea authored by Bruno Jesus's avatar Bruno Jesus Committed by Alexandre Julliard

shell32: Don't parse command line if numargs is NULL in CommandLineToArgvW.

parent 698afdca
...@@ -92,6 +92,12 @@ LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs) ...@@ -92,6 +92,12 @@ LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs)
LPWSTR cmdline; LPWSTR cmdline;
int in_quotes,bcount; int in_quotes,bcount;
if(!numargs)
{
SetLastError(ERROR_INVALID_PARAMETER);
return NULL;
}
if (*lpCmdline==0) if (*lpCmdline==0)
{ {
/* Return the path to the executable */ /* Return the path to the executable */
...@@ -113,7 +119,6 @@ LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs) ...@@ -113,7 +119,6 @@ LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs)
LocalFree( argv ); LocalFree( argv );
} }
argv[0]=(LPWSTR)(argv+1); argv[0]=(LPWSTR)(argv+1);
if (numargs)
*numargs=1; *numargs=1;
return argv; return argv;
...@@ -228,7 +233,6 @@ LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs) ...@@ -228,7 +233,6 @@ LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs)
*d='\0'; *d='\0';
argv[argc++]=arg; argv[argc++]=arg;
} }
if (numargs)
*numargs=argc; *numargs=argc;
return argv; return argv;
......
...@@ -2157,6 +2157,7 @@ static void test_commandline(void) ...@@ -2157,6 +2157,7 @@ static void test_commandline(void)
LPWSTR *args = (LPWSTR*)0xdeadcafe, pbuf; LPWSTR *args = (LPWSTR*)0xdeadcafe, pbuf;
INT numargs = -1; INT numargs = -1;
size_t buflen; size_t buflen;
DWORD lerror;
wsprintfW(cmdline,fmt1,one,two,three,four); wsprintfW(cmdline,fmt1,one,two,three,four);
args=CommandLineToArgvW(cmdline,&numargs); args=CommandLineToArgvW(cmdline,&numargs);
...@@ -2171,6 +2172,15 @@ static void test_commandline(void) ...@@ -2171,6 +2172,15 @@ static void test_commandline(void)
ok(lstrcmpW(args[2],three)==0,"arg2 is not as expected\n"); ok(lstrcmpW(args[2],three)==0,"arg2 is not as expected\n");
ok(lstrcmpW(args[3],four)==0,"arg3 is not as expected\n"); ok(lstrcmpW(args[3],four)==0,"arg3 is not as expected\n");
SetLastError(0xdeadbeef);
args=CommandLineToArgvW(cmdline,NULL);
lerror=GetLastError();
ok(args == NULL && lerror == ERROR_INVALID_PARAMETER, "expected NULL with ERROR_INVALID_PARAMETER got %p with %d\n",args,lerror);
SetLastError(0xdeadbeef);
args=CommandLineToArgvW(NULL,NULL);
lerror=GetLastError();
ok(args == NULL && lerror == ERROR_INVALID_PARAMETER, "expected NULL with ERROR_INVALID_PARAMETER got %p with %d\n",args,lerror);
wsprintfW(cmdline,fmt2,one,two,three,four); wsprintfW(cmdline,fmt2,one,two,three,four);
args=CommandLineToArgvW(cmdline,&numargs); args=CommandLineToArgvW(cmdline,&numargs);
ok(numargs == 5, "expected 5 args, got %i\n",numargs); ok(numargs == 5, "expected 5 args, got %i\n",numargs);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment