Jacek Caban : kernel32: Don' t initialize Information of passed OVERLAPPED struct in WriteFile.

Alexandre Julliard julliard at winehq.org
Tue Jan 23 16:09:50 CST 2018


Module: wine
Branch: master
Commit: 72f3fa9e2dd7afd0f2e41331a9e94febcccce7c7
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=72f3fa9e2dd7afd0f2e41331a9e94febcccce7c7

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jan 23 15:52:05 2018 +0100

kernel32: Don't initialize Information of passed OVERLAPPED struct in WriteFile.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/file.c       | 2 +-
 dlls/kernel32/tests/pipe.c | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c
index a0cd5f9..7196aff 100644
--- a/dlls/kernel32/file.c
+++ b/dlls/kernel32/file.c
@@ -565,8 +565,8 @@ BOOL WINAPI WriteFile( HANDLE hFile, LPCVOID buffer, DWORD bytesToWrite,
         piosb = (PIO_STATUS_BLOCK)overlapped;
         if (((ULONG_PTR)hEvent & 1) == 0) cvalue = overlapped;
     }
+    else piosb->Information = 0;
     piosb->u.Status = STATUS_PENDING;
-    piosb->Information = 0;
 
     status = NtWriteFile(hFile, hEvent, NULL, cvalue, piosb,
                          buffer, bytesToWrite, poffset, NULL);
diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
index e0b8713..22d120f 100644
--- a/dlls/kernel32/tests/pipe.c
+++ b/dlls/kernel32/tests/pipe.c
@@ -757,6 +757,14 @@ static void test_ReadFile(void)
     ok(overlapped.Internal == STATUS_PENDING, "Internal = %lx\n", overlapped.Internal);
     ok(overlapped.InternalHigh == 0xdeadbeef, "InternalHigh = %lx\n", overlapped.InternalHigh);
 
+    memset(&overlapped, 0, sizeof(overlapped));
+    overlapped.InternalHigh = 0xdeadbeef;
+    res = WriteFile(server, buf, 1, &size, &overlapped);
+    ok(!res && GetLastError() == ERROR_PIPE_NOT_CONNECTED, "ReadFile returned %x(%u)\n", res, GetLastError());
+    ok(size == 0, "size = %u\n", size);
+    ok(overlapped.Internal == STATUS_PENDING, "Internal = %lx\n", overlapped.Internal);
+    ok(overlapped.InternalHigh == 0xdeadbeef, "InternalHigh = %lx\n", overlapped.InternalHigh);
+
     CloseHandle(server);
     CloseHandle(client);
 }




More information about the wine-cvs mailing list