-- v2: ntdll: Avoid evaluating a possibly uninitialized variable in RtlExpandEnvironmentStrings(). (Valgrind). ntdll/tests: Fix some uninitialized variable warnings (Valgrind). ntdll/tests: Don't trace invalid pointers (Valgrind). ntdll/tests: Fix some string leaks (Valgrind).
From: Sven Baars sbaars@codeweavers.com
--- dlls/ntdll/tests/directory.c | 1 + dlls/ntdll/tests/reg.c | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/tests/directory.c b/dlls/ntdll/tests/directory.c index 40cd993e92c..526bd0c0c69 100644 --- a/dlls/ntdll/tests/directory.c +++ b/dlls/ntdll/tests/directory.c @@ -1182,6 +1182,7 @@ static void test_NtQueryDirectoryFile_change_mask(void)
done: tear_down_mask_test(testdir); + pRtlFreeUnicodeString(&ntdirname); pNtClose(&dirh); }
diff --git a/dlls/ntdll/tests/reg.c b/dlls/ntdll/tests/reg.c index 2b03be04416..952db9f594b 100644 --- a/dlls/ntdll/tests/reg.c +++ b/dlls/ntdll/tests/reg.c @@ -440,6 +440,7 @@ static void test_NtCreateKey(void) pRtlCreateUnicodeStringFromAsciiz( &str, "test_subkey\" ); status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 ); ok( status == STATUS_SUCCESS, "NtCreateKey failed: 0x%08lx\n", status ); + pRtlFreeUnicodeString( &str );
pRtlCreateUnicodeStringFromAsciiz( &str, "test_subkey\" ); status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 ); @@ -451,6 +452,7 @@ static void test_NtCreateKey(void) pRtlCreateUnicodeStringFromAsciiz( &str, "test_subkey2\\" ); status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 ); ok( status == STATUS_SUCCESS, "NtCreateKey failed: 0x%08lx\n", status ); + pRtlFreeUnicodeString( &str ); pRtlCreateUnicodeStringFromAsciiz( &str, "test_subkey2\\test\\" ); status = pNtCreateKey( &subkey2, am, &attr, 0, 0, 0, 0 ); ok( status == STATUS_SUCCESS, "NtCreateKey failed: 0x%08lx\n", status ); @@ -1344,7 +1346,11 @@ static DWORD get_key_value( HANDLE root, const char *name, DWORD flags ) pRtlCreateUnicodeStringFromAsciiz( &str, name );
status = pNtOpenKey( &key, flags | KEY_ALL_ACCESS, &attr ); - if (status == STATUS_OBJECT_NAME_NOT_FOUND) return 0; + if (status == STATUS_OBJECT_NAME_NOT_FOUND) + { + pRtlFreeUnicodeString( &str ); + return 0; + } ok( status == STATUS_SUCCESS, "%08lx: NtCreateKey failed: 0x%08lx\n", flags, status );
status = pNtQueryValueKey( key, &value_str, KeyValuePartialInformation, info, len, &len );
From: Sven Baars sbaars@codeweavers.com
This fixes a crash when value_data is equal to 0xdeadbeef. --- dlls/ntdll/tests/reg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/ntdll/tests/reg.c b/dlls/ntdll/tests/reg.c index 952db9f594b..2f008d3156d 100644 --- a/dlls/ntdll/tests/reg.c +++ b/dlls/ntdll/tests/reg.c @@ -2547,7 +2547,7 @@ static NTSTATUS WINAPI query_routine(const WCHAR *value_name, ULONG value_type, ULONG expected_type;
trace("Value name: %s\n", debugstr_w(value_name)); - trace("Value data: %s\n", debugstr_w(value_data)); + if (value_data_size) trace("Value data: %s\n", debugstr_w(value_data));
if (!(test->flags & SKIP_NAME_CHECK)) {
From: Sven Baars sbaars@codeweavers.com
--- dlls/ntdll/tests/string.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/tests/string.c b/dlls/ntdll/tests/string.c index 3d975d12a10..787756daf14 100644 --- a/dlls/ntdll/tests/string.c +++ b/dlls/ntdll/tests/string.c @@ -1689,19 +1689,19 @@ static void test__snwprintf(void) memset(buffer, 0xcc, sizeof(buffer)); res = p_snwprintf(buffer, 3, L"test"); ok(res == -1, "res = %d\n", res); - ok(!memcmp(buffer, L"tes", 3 * sizeof(WCHAR)), "buf = %s\n", debugstr_w(buffer)); + ok(!memcmp(buffer, L"tes", 3 * sizeof(WCHAR)), "buf = %s\n", debugstr_wn(buffer, 3)); ok(buffer[3] == 0xcccc, "buffer[3] = %x\n", buffer[3]);
memset(buffer, 0xcc, sizeof(buffer)); res = p_snwprintf(buffer, 4, L"%s", L"test"); ok(res == 4, "res = %d\n", res); - ok(!memcmp(buffer, L"test", 4 * sizeof(WCHAR)), "buf = %s\n", debugstr_w(buffer)); + ok(!memcmp(buffer, L"test", 4 * sizeof(WCHAR)), "buf = %s\n", debugstr_wn(buffer, 4)); ok(buffer[4] == 0xcccc, "buffer[4] = %x\n", buffer[4]);
memset(buffer, 0xcc, sizeof(buffer)); res = p_snwprintf(buffer, 3, L"%s", L"test"); ok(res == -1, "res = %d\n", res); - ok(!memcmp(buffer, L"tes", 3), "buf = %s\n", debugstr_w(buffer)); + ok(!memcmp(buffer, L"tes", 3), "buf = %s\n", debugstr_wn(buffer, 3)); ok(buffer[3] == 0xcccc, "buffer[3] = %x\n", buffer[3]);
res = p_snwprintf(buffer, ARRAY_SIZE(buffer), L"%I64x %d", (ULONGLONG)0x1234567890, 1);
From: Sven Baars sbaars@codeweavers.com
--- dlls/ntdll/env.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/env.c b/dlls/ntdll/env.c index 7fae94f3b52..dd4f9c244f7 100644 --- a/dlls/ntdll/env.c +++ b/dlls/ntdll/env.c @@ -417,7 +417,7 @@ NTSTATUS WINAPI RtlExpandEnvironmentStrings( const WCHAR *renv, WCHAR *src, SIZE copy = len; if (count <= copy) /* Either copy the entire value, or nothing at all */ copy = 0; - if (dst && count) /* When the variable is the last thing that fits into dst, the string is null terminated */ + if (count && dst) /* When the variable is the last thing that fits into dst, the string is null terminated */ dst[copy] = 0; /* Either right after, or if it doesn't fit, where it would start */ } else @@ -438,10 +438,10 @@ NTSTATUS WINAPI RtlExpandEnvironmentStrings( const WCHAR *renv, WCHAR *src, SIZE } } total_size += len; - if (dst) + if (count && dst) { if (count < len) len = count; - if (count <= copy) copy = count ? count - 1 : 0; /* If the buffer is too small, we copy one character less */ + if (count <= copy) copy = count - 1; /* If the buffer is too small, we copy one character less */ memcpy(dst, var, copy * sizeof(WCHAR)); count -= len; dst += copy; @@ -450,7 +450,7 @@ NTSTATUS WINAPI RtlExpandEnvironmentStrings( const WCHAR *renv, WCHAR *src, SIZE
if (!renv) RtlReleasePebLock();
- if (dst && count) *dst = '\0'; + if (count && dst) *dst = '\0'; if (plen) *plen = total_size;
return (count) ? STATUS_SUCCESS : STATUS_BUFFER_TOO_SMALL;
On Fri Apr 18 14:31:42 2025 +0000, Sven Baars wrote:
changed this line in [version 2 of the diff](/wine/wine/-/merge_requests/7826/diffs?diff_id=171846&start_sha=91c0e571d66049e65c308f8d7af40512361d44dd#26e10a13dd5ef8fb64fac3de7ae2d39e3fbe2a91_314_314)
Thanks. I changed it in `RtlExpandEnvironmentStrings` instead.