Subject: Re: bug#2062: PATH can contain non-expanded variables

From: Jason Rumney <[email-masked]>
Date: Tue, 27 Jan 2009 09:56:59 +0800

Juanma Barranquero wrote:
> Index: emacs.c
> ===================================================================
> RCS file: /sources/emacs/emacs/src/emacs.c,v
> retrieving revision 1.461
> diff -u -2 -r1.461 emacs.c
> --- emacs.c	23 Jan 2009 14:53:11 -0000	1.461
> +++ emacs.c	26 Jan 2009 12:48:49 -0000
> @@ -2467,6 +2467,12 @@
>    if (path)
>      {
> +#ifdef WINDOWSNT
> +      DWORD required = ExpandEnvironmentStrings (path, NULL, 0);
> +      p = (char *) alloca (required);
> +      ExpandEnvironmentStrings (path, p, required);
> +#else
>        p = alloca (strlen (path) + 1);
>        strcpy (p, path);
> +#endif
>        path = p;
>   

The right place to do this expansion is where the variable is read from 
the registry, and only when the type is REG_EXPAND_SZ.