[PATCH 2/2] kernelbase: Fix GetEnvironmentVariableW return for empty variables.

Vladimir Panteleev git at vladimir.panteleev.md
Thu Jan 16 02:32:42 CST 2020


Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48471
Signed-off-by: Vladimir Panteleev <git at vladimir.panteleev.md>
---
 dlls/kernelbase/process.c       | 3 ++-
 dlls/kernelbase/tests/process.c | 6 +++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c
index 788f03f220..612b0b2a2f 100644
--- a/dlls/kernelbase/process.c
+++ b/dlls/kernelbase/process.c
@@ -1276,7 +1276,8 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetEnvironmentVariableW( LPCWSTR name, LPWSTR val
     len = us_value.Length / sizeof(WCHAR);
     if (status == STATUS_BUFFER_TOO_SMALL) return len + 1;
     if (!set_ntstatus( status )) return 0;
-    if (size) val[len] = 0;
+    if (!size) return len + 1;
+    val[len] = 0;
     return len;
 }
 
diff --git a/dlls/kernelbase/tests/process.c b/dlls/kernelbase/tests/process.c
index 24ab2c4b71..55d96d8659 100644
--- a/dlls/kernelbase/tests/process.c
+++ b/dlls/kernelbase/tests/process.c
@@ -31,13 +31,17 @@ static BOOL (WINAPI *pSetEnvironmentVariableW)(LPCWSTR, LPCWSTR);
 
 static void test_GetEnvironmentVariableW(void)
 {
-    DWORD gle;
+    DWORD gle, ret;
 
     pSetEnvironmentVariableW(L"TESTVAR", L"abc");
     SetLastError(0xdeadbeef);
     pGetEnvironmentVariableW(L"TESTVAR", NULL, 0);
     gle = GetLastError();
     ok(gle == 0xdeadbeef, "got %d\n", gle);
+
+    pSetEnvironmentVariableW(L"TESTVAR", L"");
+    ret = pGetEnvironmentVariableW(L"TESTVAR", NULL, 0);
+    ok(ret == 1, "got %d\n", ret);
 }
 
 START_TEST(process)
-- 
2.25.0




More information about the wine-devel mailing list