mirror of
https://github.com/reactos/wine.git
synced 2025-02-21 21:32:01 +00:00
kernel32: Don't use HIWORD to check for swapped args in GetCurrentDirectoryA.
This commit is contained in:
parent
ef7cafc11c
commit
0f5d042ff2
@ -1400,13 +1400,13 @@ UINT WINAPI GetCurrentDirectoryA( UINT buflen, LPSTR buf )
|
||||
WCHAR bufferW[MAX_PATH];
|
||||
DWORD ret;
|
||||
|
||||
if (buflen && buf && !HIWORD(buf))
|
||||
if (buflen && buf && ((ULONG_PTR)buf >> 16) == 0)
|
||||
{
|
||||
/* Win9x catches access violations here, returning zero.
|
||||
* This behaviour resulted in some people not noticing
|
||||
* that they got the argument order wrong. So let's be
|
||||
* nice and fail gracefully if buf is invalid and looks
|
||||
* more like a buflen (which is probably MAX_PATH). */
|
||||
* more like a buflen. */
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
|
@ -467,6 +467,16 @@ static void test_CurrentDirectoryA(CHAR *origdir, CHAR *newdir)
|
||||
if (len) ok( !strcmp( buffer, origdir ), "wrong result %s\n", buffer );
|
||||
HeapFree( GetProcessHeap(), 0, buffer );
|
||||
|
||||
/* Check for crash prevention on swapped args. Crashes all but Win9x.
|
||||
*/
|
||||
if (0)
|
||||
{
|
||||
SetLastError( 0xdeadbeef );
|
||||
len = GetCurrentDirectoryA( 42, (LPSTR)(MAX_PATH + 42) );
|
||||
ok( len == 0 && GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"GetCurrentDirectoryA failed to fail %u err %u\n", len, GetLastError() );
|
||||
}
|
||||
|
||||
/* SetCurrentDirectoryA shouldn't care whether the string has a
|
||||
trailing '\\' or not
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user