[PATCH] ntdll: Expand environment variables when querying them

Fabian Maurer dark.shadow4 at web.de
Mon Mar 25 16:28:40 CDT 2019


For a test program see the bug report.
A test is hard to include since environment variables won't update
without a reboot.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46901
Signed-off-by: Fabian Maurer <dark.shadow4 at web.de>
---
 dlls/ntdll/env.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/dlls/ntdll/env.c b/dlls/ntdll/env.c
index 367d083211..e186e3b917 100644
--- a/dlls/ntdll/env.c
+++ b/dlls/ntdll/env.c
@@ -164,11 +164,16 @@ NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR env,
     var = ENV_FindVariable(var, name->Buffer, namelen);
     if (var != NULL)
     {
-        value->Length = strlenW(var) * sizeof(WCHAR);
+        WCHAR buffer[UNICODE_STRING_MAX_CHARS];
+        SIZE_T len;
+        RtlExpandEnvironmentStrings(env, (WCHAR *)var, strlenW(var), buffer, ARRAY_SIZE(buffer), &len);
+
+        value->Length = (len - 1) * sizeof(WCHAR); /* Length without '\0' terminator */

         if (value->Length <= value->MaximumLength)
         {
-            memmove(value->Buffer, var, min(value->Length + sizeof(WCHAR), value->MaximumLength));
+            memmove(value->Buffer, buffer, min(value->Length + sizeof(WCHAR), value->MaximumLength));
+
             nts = STATUS_SUCCESS;
         }
         else nts = STATUS_BUFFER_TOO_SMALL;
--
2.21.0




More information about the wine-devel mailing list