Jefferson Carpenter : kernelbase: Zero out retkey in the ERROR_INVALID_HANDLE case in RegOpenKeyExW.

Alexandre Julliard julliard at winehq.org
Fri Mar 27 16:14:38 CDT 2020


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

Author: Jefferson Carpenter <jeffersoncarpenter2 at gmail.com>
Date:   Tue Mar 24 08:02:34 2020 +0000

kernelbase: Zero out retkey in the ERROR_INVALID_HANDLE case in RegOpenKeyExW.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48798
Signed-off-by: Jefferson Carpenter <jeffersoncarpenter2 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/advapi32/tests/registry.c | 5 +++++
 dlls/kernelbase/registry.c     | 1 +
 2 files changed, 6 insertions(+)

diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c
index e4d4893bd4..1f335b1c9f 100644
--- a/dlls/advapi32/tests/registry.c
+++ b/dlls/advapi32/tests/registry.c
@@ -1081,6 +1081,11 @@ static void test_reg_open_key(void)
     ok(!RegCloseKey(hkResult), "got invalid hkey\n");
 
     /* empty subkey of NULL */
+    hkResult = hkPreserve;
+    ret = RegOpenKeyExW(NULL, L"", 0, KEY_QUERY_VALUE, &hkResult);
+    ok(ret == ERROR_INVALID_HANDLE, "expected ERROR_INVALID_HANDLE, got %d\n", ret);
+    ok(hkResult == NULL || broken(hkResult == hkPreserve /* Windows XP */), "expected hkResult == NULL\n");
+
     hkResult = hkPreserve;
     ret = RegOpenKeyExA(NULL, "", 0, KEY_QUERY_VALUE, &hkResult);
     ok(ret == ERROR_INVALID_HANDLE, "expected ERROR_INVALID_HANDLE, got %d\n", ret);
diff --git a/dlls/kernelbase/registry.c b/dlls/kernelbase/registry.c
index e6f3722f70..f8afb94f8d 100644
--- a/dlls/kernelbase/registry.c
+++ b/dlls/kernelbase/registry.c
@@ -479,6 +479,7 @@ LSTATUS WINAPI DECLSPEC_HOTPATCH RegOpenKeyExW( HKEY hkey, LPCWSTR name, DWORD o
     if (HandleToUlong(hkey) == HandleToUlong(HKEY_CLASSES_ROOT) && name && *name == '\\') name++;
 
     if (!retkey) return ERROR_INVALID_PARAMETER;
+    *retkey = NULL;
     if (!(hkey = get_special_root_hkey( hkey, access ))) return ERROR_INVALID_HANDLE;
 
     attr.Length = sizeof(attr);




More information about the wine-cvs mailing list