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

This commit is contained in:
Bruno Jesus 2011-10-25 23:35:13 -02:00 committed by Alexandre Julliard
parent 698afdca98
commit f621f8ea78
2 changed files with 18 additions and 4 deletions

View File

@ -92,6 +92,12 @@ LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs)
LPWSTR cmdline;
int in_quotes,bcount;
if(!numargs)
{
SetLastError(ERROR_INVALID_PARAMETER);
return NULL;
}
if (*lpCmdline==0)
{
/* Return the path to the executable */
@ -113,8 +119,7 @@ LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs)
LocalFree( argv );
}
argv[0]=(LPWSTR)(argv+1);
if (numargs)
*numargs=1;
*numargs=1;
return argv;
}
@ -228,8 +233,7 @@ LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs)
*d='\0';
argv[argc++]=arg;
}
if (numargs)
*numargs=argc;
*numargs=argc;
return argv;
}

View File

@ -2157,6 +2157,7 @@ static void test_commandline(void)
LPWSTR *args = (LPWSTR*)0xdeadcafe, pbuf;
INT numargs = -1;
size_t buflen;
DWORD lerror;
wsprintfW(cmdline,fmt1,one,two,three,four);
args=CommandLineToArgvW(cmdline,&numargs);
@ -2171,6 +2172,15 @@ static void test_commandline(void)
ok(lstrcmpW(args[2],three)==0,"arg2 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);
args=CommandLineToArgvW(cmdline,&numargs);
ok(numargs == 5, "expected 5 args, got %i\n",numargs);