[PATCH 2/2] ntdll: Handle INVALID_HANDLE_VALUE explicitly in NtClose().

Nikolay Sivov nsivov at codeweavers.com
Tue Aug 10 11:51:20 CDT 2021


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---

Reported by Sergey Bychkow as https://bugs.winehq.org/show_bug.cgi?id=51529.

 dlls/kernel32/tests/process.c | 2 --
 dlls/ntdll/tests/om.c         | 1 -
 dlls/ntdll/unix/server.c      | 2 ++
 3 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
index ce7de563d9d..31d758f076d 100644
--- a/dlls/kernel32/tests/process.c
+++ b/dlls/kernel32/tests/process.c
@@ -4978,10 +4978,8 @@ static void test_CloseHandle(void)
 
     SetLastError(0xdeadbeef);
     ret = CloseHandle(INVALID_HANDLE_VALUE);
-todo_wine {
     ok(ret, "Unexpected return value %d.\n", ret);
     ok(GetLastError() == 0xdeadbeef, "Unexpected error.\n");
-}
 
     SetLastError(0);
     ret = CloseHandle(UlongToHandle(0xdeadbee1));
diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
index 3d518af5f3a..3e4993171c3 100644
--- a/dlls/ntdll/tests/om.c
+++ b/dlls/ntdll/tests/om.c
@@ -2949,7 +2949,6 @@ static void test_close_handle(void)
     NTSTATUS status;
 
     status = NtClose(INVALID_HANDLE_VALUE);
-todo_wine
     ok(!status, "Unexpected status %#x.\n", status);
 
     status = NtClose(0);
diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c
index 986eb6c3250..84a51d42aa3 100644
--- a/dlls/ntdll/unix/server.c
+++ b/dlls/ntdll/unix/server.c
@@ -1728,6 +1728,8 @@ NTSTATUS WINAPI NtClose( HANDLE handle )
     NTSTATUS ret;
     int fd;
 
+    if (handle == INVALID_HANDLE_VALUE) return STATUS_SUCCESS;
+
     server_enter_uninterrupted_section( &fd_cache_mutex, &sigset );
 
     /* always remove the cached fd; if the server request fails we'll just
-- 
2.30.2




More information about the wine-devel mailing list