(resend) shell32: fix program search in ShellExecuteEx, quote program name if it contains spaces [3rd]

Alexandre Julliard julliard at winehq.org
Fri Aug 21 07:22:14 CDT 2009


Stefan Leichter <Stefan.Leichter at camline.com> writes:

> Am Friday 21 August 2009 11:37:56 schrieb Alexandre Julliard:
>> Stefan Leichter <Stefan.Leichter at camline.com> writes:
>> > @@ -1711,32 +1713,35 @@
>> >  	}
>> >  	else
>> >  	{
>> > -	    /* If the executable name is not quoted, we have to use this search
>> > loop here, +            /* FIXME: what versions support this? Fails on
>> > 2000/XP +               If the executable name is not quoted, we have to
>> > use this search loop here, that in CreateProcess() is not sufficient
>> > because it does not handle shell links. */ WCHAR buffer[MAX_PATH],
>> > xlpFile[MAX_PATH];
>> > -	    LPWSTR space, s;
>> > +            LPWSTR space;
>> >
>> > -	    LPWSTR beg = wszApplicationName/*sei_tmp.lpFile*/;
>> > -	    for(s=beg; (space=strchrW(s, ' ')); s=space+1) {
>> > -		int idx = space-sei_tmp.lpFile;
>> > -		memcpy(buffer, sei_tmp.lpFile, idx * sizeof(WCHAR));
>> > +            lstrcpynW(buffer, wszApplicationName,
>> > sizeof(buffer)/sizeof(WCHAR)); +            space = buffer +
>> > strlenW(buffer);
>> > +            do
>>
>> Searching from the end doesn't look right. This would need a test case.
>
> This tests needs an additional program/binary, that does not need command line 
> parameters (therefore shell32_test.exe can not be used), to be build in the 
> test directory.

What you need to test is things like "test file.exe two.exe" where both
exe files exist. I don't see why you can't pass arguments too, you just
have to make the child a bit smarter to ignore args like "two.exe".

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list