[PATCH 1/2] ntdll: Add a test for closing INVALID_HANDLE_VALUE handle.

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


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/kernel32/tests/process.c | 23 +++++++++++++++++++++++
 dlls/ntdll/tests/om.c         | 16 ++++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
index e729bca87ef..ce7de563d9d 100644
--- a/dlls/kernel32/tests/process.c
+++ b/dlls/kernel32/tests/process.c
@@ -4972,6 +4972,28 @@ static void test_job_list_attribute(HANDLE parent_job)
     ok(ret, "SetInformationJobObject error %u\n", GetLastError());
 }
 
+static void test_CloseHandle(void)
+{
+    BOOL ret;
+
+    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));
+    ok(!ret, "Unexpected return value %d.\n", ret);
+    ok(GetLastError() == ERROR_INVALID_HANDLE, "Unexpected error.\n");
+
+    SetLastError(0);
+    ret = CloseHandle(0);
+    ok(!ret, "Unexpected return value %d.\n", ret);
+    ok(GetLastError() == ERROR_INVALID_HANDLE, "Unexpected error.\n");
+}
+
 START_TEST(process)
 {
     HANDLE job, hproc, h, h2;
@@ -5101,6 +5123,7 @@ START_TEST(process)
     test_parent_process_attribute(0, NULL);
     test_handle_list_attribute(FALSE, NULL, NULL);
     test_dead_process();
+    test_CloseHandle();
 
     /* things that can be tested:
      *  lookup:         check the way program to be executed is searched
diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
index af5e014f069..3d518af5f3a 100644
--- a/dlls/ntdll/tests/om.c
+++ b/dlls/ntdll/tests/om.c
@@ -2944,6 +2944,21 @@ static void test_get_next_thread(void)
     CloseHandle(thread);
 }
 
+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);
+    ok(status == STATUS_INVALID_HANDLE, "Unexpected status %#x.\n", status);
+
+    status = NtClose(UlongToHandle(0xdeadbee1));
+    ok(status == STATUS_INVALID_HANDLE, "Unexpected status %#x.\n", status);
+}
+
 START_TEST(om)
 {
     HMODULE hntdll = GetModuleHandleA("ntdll.dll");
@@ -3020,4 +3035,5 @@ START_TEST(om)
     test_duplicate_object();
     test_object_types();
     test_get_next_thread();
+    test_close_handle();
 }
-- 
2.30.2




More information about the wine-devel mailing list