[PATCH v2 2/2] advapi32: Don't read the key name if the root key handle is invalid

Alex Henrie alexhenrie24 at gmail.com
Tue Nov 6 22:11:54 CST 2018


Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
 dlls/advapi32/registry.c       | 2 ++
 dlls/advapi32/tests/registry.c | 6 ++++++
 2 files changed, 8 insertions(+)

diff --git a/dlls/advapi32/registry.c b/dlls/advapi32/registry.c
index 0a8ccfbf20..4b33ade88c 100644
--- a/dlls/advapi32/registry.c
+++ b/dlls/advapi32/registry.c
@@ -313,6 +313,8 @@ static inline HKEY get_special_root_hkey( HKEY hkey, REGSAM access )
 {
     HKEY ret = hkey;
 
+    if (hkey == INVALID_HANDLE_VALUE) return 0;
+
     if ((HandleToUlong(hkey) >= HandleToUlong(HKEY_SPECIAL_ROOT_FIRST))
             && (HandleToUlong(hkey) <= HandleToUlong(HKEY_SPECIAL_ROOT_LAST)))
     {
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c
index ed14ae92b4..dae535253e 100644
--- a/dlls/advapi32/tests/registry.c
+++ b/dlls/advapi32/tests/registry.c
@@ -1309,6 +1309,9 @@ static void test_reg_create_key(void)
     ret = RegCreateKeyExA(INVALID_HANDLE_VALUE, (const char *)0xdeadbeef, 0, NULL, 0, 0, NULL, NULL, NULL);
     ok(ret == ERROR_BADKEY, "RegCreateKeyExA returned %d\n", ret);
 
+    ret = RegCreateKeyExA(INVALID_HANDLE_VALUE, (const char *)0xdeadbeef, 0, NULL, 0, 0, NULL, (HKEY *)0xdeadbeef, NULL);
+    ok(ret == ERROR_INVALID_HANDLE, "RegCreateKeyExA returned %d\n", ret);
+
     ret = RegCreateKeyExW(INVALID_HANDLE_VALUE, NULL, 1, NULL, 0, 0, NULL, NULL, NULL);
     ok(ret == ERROR_INVALID_PARAMETER, "RegCreateKeyExA returned %d\n", ret);
 
@@ -1321,6 +1324,9 @@ static void test_reg_create_key(void)
     ret = RegCreateKeyExW(INVALID_HANDLE_VALUE, (const WCHAR *)0xdeadbeef, 0, NULL, 0, 0, NULL, NULL, NULL);
     ok(ret == ERROR_BADKEY, "RegCreateKeyExA returned %d\n", ret);
 
+    ret = RegCreateKeyExW(INVALID_HANDLE_VALUE, (const WCHAR *)0xdeadbeef, 0, NULL, 0, 0, NULL, (HKEY *)0xdeadbeef, NULL);
+    ok(ret == ERROR_INVALID_HANDLE, "RegCreateKeyExA returned %d\n", ret);
+
     ret = RegCreateKeyExA(hkey_main, "Subkey1", 0, NULL, 0, KEY_NOTIFY, NULL, &hkey1, NULL);
     ok(!ret, "RegCreateKeyExA failed with error %d\n", ret);
     /* should succeed: all versions of Windows ignore the access rights
-- 
2.19.1




More information about the wine-devel mailing list