Module: wine Branch: master Commit: 32cc4011ee04046d41a41549d5a6a6233647f756 URL: http://source.winehq.org/git/wine.git/?a=commit;h=32cc4011ee04046d41a41549d5...
Author: Nikolay Sivov bunglehead@gmail.com Date: Thu Jan 22 15:00:33 2009 +0300
kernel32: Make GetOverlappedResult crash on NULL args as native does.
---
dlls/kernel32/file.c | 8 +------- dlls/kernel32/tests/file.c | 6 ++++++ dlls/ole32/rpc.c | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c index 92dbedf..e757205 100644 --- a/dlls/kernel32/file.c +++ b/dlls/kernel32/file.c @@ -603,12 +603,6 @@ BOOL WINAPI GetOverlappedResult(HANDLE hFile, LPOVERLAPPED lpOverlapped,
TRACE( "(%p %p %p %x)\n", hFile, lpOverlapped, lpTransferred, bWait );
- if ( lpOverlapped == NULL ) - { - ERR("lpOverlapped was null\n"); - return FALSE; - } - status = lpOverlapped->Internal; if (status == STATUS_PENDING) { @@ -624,7 +618,7 @@ BOOL WINAPI GetOverlappedResult(HANDLE hFile, LPOVERLAPPED lpOverlapped, status = lpOverlapped->Internal; }
- if (lpTransferred) *lpTransferred = lpOverlapped->InternalHigh; + *lpTransferred = lpOverlapped->InternalHigh;
if (status) SetLastError( RtlNtStatusToDosError(status) ); return !status; diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c index ed893fc..1196d7a 100644 --- a/dlls/kernel32/tests/file.c +++ b/dlls/kernel32/tests/file.c @@ -2022,6 +2022,12 @@ static void test_overlapped(void) DWORD r, result;
/* GetOverlappedResult crashes if the 2nd or 3rd param are NULL */ + if (0) /* tested: WinXP */ + { + GetOverlappedResult(0, NULL, &result, FALSE); + GetOverlappedResult(0, &ov, NULL, FALSE); + GetOverlappedResult(0, NULL, NULL, FALSE); + }
memset( &ov, 0, sizeof ov ); result = 1; diff --git a/dlls/ole32/rpc.c b/dlls/ole32/rpc.c index caad344..caf5b6a 100644 --- a/dlls/ole32/rpc.c +++ b/dlls/ole32/rpc.c @@ -1861,6 +1861,7 @@ static DWORD WINAPI local_server_thread(LPVOID param) BOOL multi_use = lsp->multi_use; OVERLAPPED ovl; HANDLE pipe_event; + DWORD bytes;
TRACE("Starting threader for %s.\n",debugstr_guid(&lsp->clsid));
@@ -1929,7 +1930,7 @@ static DWORD WINAPI local_server_thread(LPVOID param) }
WriteFile(hPipe,buffer,buflen,&res,&ovl); - GetOverlappedResult(hPipe, &ovl, NULL, TRUE); + GetOverlappedResult(hPipe, &ovl, &bytes, TRUE); HeapFree(GetProcessHeap(),0,buffer);
FlushFileBuffers(hPipe);