[PATCH v2 2/3] kernelbase: Don't return ERROR_INSUFFICIENT_BUFFER from GetEnvironmentVariableW.

Vladimir Panteleev git at vladimir.panteleev.md
Tue Jan 21 05:37:37 CST 2020


Windows doesn't do this (except XP, and then only for empty variables).

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

diff --git a/dlls/kernel32/tests/environ.c b/dlls/kernel32/tests/environ.c
index 128a5fdbe5..7eaafc30fd 100644
--- a/dlls/kernel32/tests/environ.c
+++ b/dlls/kernel32/tests/environ.c
@@ -206,10 +206,13 @@ static void test_GetSetEnvironmentVariableW(void)
        GetLastError());
 
     /* Try to retrieve the environment variable we just set */
+    SetLastError(0xdeadbeef);
     ret_size = GetEnvironmentVariableW(name, NULL, 0);
     ok(ret_size == lstrlenW(value) + 1,
        "should return length with terminating 0 ret_size=%d\n",
        ret_size);
+    ok(GetLastError() == 0xdeadbeef,
+       "should not fail with zero size but GetLastError=%d\n", GetLastError());
 
     lstrcpyW(buf, fooW);
     ret_size = GetEnvironmentVariableW(name, buf, lstrlenW(value));
diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c
index a07dddb1fc..788f03f220 100644
--- a/dlls/kernelbase/process.c
+++ b/dlls/kernelbase/process.c
@@ -1274,7 +1274,8 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetEnvironmentVariableW( LPCWSTR name, LPWSTR val
 
     status = RtlQueryEnvironmentVariable_U( NULL, &us_name, &us_value );
     len = us_value.Length / sizeof(WCHAR);
-    if (!set_ntstatus( status )) return (status == STATUS_BUFFER_TOO_SMALL) ? len + 1 : 0;
+    if (status == STATUS_BUFFER_TOO_SMALL) return len + 1;
+    if (!set_ntstatus( status )) return 0;
     if (size) val[len] = 0;
     return len;
 }
-- 
2.25.0




More information about the wine-devel mailing list