kernel32: Make GetOverlappedResult crash on NULL args as native does

Nikolay Sivov bunglehead at gmail.com
Thu Jan 22 06:03:38 CST 2009


http://bugs.winehq.org/show_bug.cgi?id=16161

Changelog:
    - make GetOverlappedResult crash on NULL args as native does
    - corrected existing GetOverlappedResult call in ole32 with a NULL
    - a comment added in a test

>From e150f85528202a5cb5538230cc8fc02cec6dbd88 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <bunglehead at gmail.com>
Date: Thu, 22 Jan 2009 15:00:33 +0300
Subject:   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);
-- 
1.5.6.5






More information about the wine-patches mailing list