[PATCH] ntdll: Expand environment variables when querying them

Fabian Maurer dark.shadow4 at web.de
Wed Mar 27 17:25:43 CDT 2019


Please consider this patch obsolete, I sent in a test for the underlying issue
- see https://source.winehq.org/patches/data/161743

Regards,
Fabian Maurer


> 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