Module: wine Branch: master Commit: 88fa3459b928c6d27f56c67778c0e5d45ebbaa5b URL: https://gitlab.winehq.org/wine/wine/-/commit/88fa3459b928c6d27f56c67778c0e5d...
Author: Sven Baars sbaars@codeweavers.com Date: Fri Mar 17 11:56:31 2023 +0100
kernelbase: Also call NtOpenKeyEx() on empty key names.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54691
---
dlls/advapi32/tests/registry.c | 4 ++-- dlls/kernelbase/registry.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c index 723950a4d0f..528875261d6 100644 --- a/dlls/advapi32/tests/registry.c +++ b/dlls/advapi32/tests/registry.c @@ -1510,11 +1510,11 @@ static void test_reg_delete_key(void) ok(ret == ERROR_SUCCESS, "Could not open key, got %ld\n", ret);
ret = RegDeleteKeyExA(key, "", KEY_WOW64_32KEY, 0); - todo_wine_if(ptr_size == 64) ok(ret == ERROR_SUCCESS, "RegDeleteKeyExA failed, got %ld\n", ret); + ok(ret == ERROR_SUCCESS, "RegDeleteKeyExA failed, got %ld\n", ret); RegCloseKey(key);
ret = RegOpenKeyExA(hkey_main, "deleteme", 0, KEY_READ | KEY_WOW64_32KEY, &key); - todo_wine_if(ptr_size == 64) ok(ret == ERROR_FILE_NOT_FOUND, "Key was not deleted, got %ld\n", ret); + ok(ret == ERROR_FILE_NOT_FOUND, "Key was not deleted, got %ld\n", ret); RegCloseKey(key); }
diff --git a/dlls/kernelbase/registry.c b/dlls/kernelbase/registry.c index d414b210026..daf1afa2cd6 100644 --- a/dlls/kernelbase/registry.c +++ b/dlls/kernelbase/registry.c @@ -155,7 +155,7 @@ static NTSTATUS open_subkey( HKEY *subkey, HKEY root, UNICODE_STRING *name, DWOR attr.SecurityDescriptor = NULL; attr.SecurityQualityOfService = NULL;
- if (buffer[0] == '\') return STATUS_OBJECT_PATH_INVALID; + if (len > 0 && buffer[0] == '\') return STATUS_OBJECT_PATH_INVALID; while (i < len && buffer[i] != '\') i++;
str.Buffer = name->Buffer; @@ -202,7 +202,7 @@ static NTSTATUS open_subkey( HKEY *subkey, HKEY root, UNICODE_STRING *name, DWOR /* wrapper for NtOpenKeyEx to handle Wow6432 nodes */ static NTSTATUS open_key( HKEY *retkey, HKEY root, UNICODE_STRING name, DWORD options, ACCESS_MASK access ) { - HKEY subkey, subkey_root = root; + HKEY subkey = 0, subkey_root = root; NTSTATUS status = 0;
*retkey = NULL; @@ -228,7 +228,7 @@ static NTSTATUS open_key( HKEY *retkey, HKEY root, UNICODE_STRING name, DWORD op return status; }
- while (!status && name.Length) + while (!status && (name.Length || !subkey)) { status = open_subkey( &subkey, subkey_root, &name, options, access ); if (subkey_root && subkey_root != root) NtClose( subkey_root );