Module: wine Branch: master Commit: 2821a850d401dfabc5d76a4f40b0d6a42045fc5e URL: https://gitlab.winehq.org/wine/wine/-/commit/2821a850d401dfabc5d76a4f40b0d6a...
Author: Alex Henrie alexhenrie24@gmail.com Date: Fri Jun 14 23:26:38 2024 -0600
ntdll: Double-null-terminate multi-strings when using RTL_QUERY_REGISTRY_DIRECT.
---
dlls/ntdll/reg.c | 3 +++ dlls/ntdll/tests/reg.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/reg.c b/dlls/ntdll/reg.c index ec4ec41c5fb..41dd1853c17 100644 --- a/dlls/ntdll/reg.c +++ b/dlls/ntdll/reg.c @@ -321,13 +321,16 @@ static NTSTATUS RTL_ReportRegistryValue(PKEY_VALUE_FULL_INFORMATION pInfo, if (!(pQuery->Flags & RTL_QUERY_REGISTRY_NOEXPAND)) return STATUS_INVALID_PARAMETER;
+ len += sizeof(WCHAR); if (str->Buffer == NULL) { str->Buffer = RtlAllocateHeap(GetProcessHeap(), 0, len); str->MaximumLength = len; } len = min(len, str->MaximumLength); + len -= sizeof(WCHAR); memcpy(str->Buffer, ((CHAR*)pInfo) + pInfo->DataOffset, len); + str->Buffer[len / sizeof(WCHAR)] = 0; str->Length = len; break;
diff --git a/dlls/ntdll/tests/reg.c b/dlls/ntdll/tests/reg.c index 50e32cf901a..85bcaf5ba7d 100644 --- a/dlls/ntdll/tests/reg.c +++ b/dlls/ntdll/tests/reg.c @@ -2686,7 +2686,7 @@ static struct query_reg_values_test query_reg_values_tests[] = { {{ NULL, RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_NOEXPAND, (WCHAR*)L"CapitalsOfEurope", &query_reg_values_direct_str }}, - STATUS_SUCCESS, 0, WINE_TODO_DATA, REG_SZ, L"Brussels\0Paris\0%PATH%\0", sizeof(L"Brussels\0Paris\0%PATH%\0") + STATUS_SUCCESS, 0, 0, REG_SZ, L"Brussels\0Paris\0%PATH%\0", sizeof(L"Brussels\0Paris\0%PATH%\0") }, /* DIRECT with a null buffer crashes on Windows */ /* {