msvcrt: Free previous environment variable when clearing.

Shifting the rest of the variables by one towards indices of lesser value
overwrites the variable being cleared and effectively leaks it.

Signed-off-by: David Kahurani <k.kahurani@gmail.com>
This commit is contained in:
David Kahurani 2024-01-26 16:08:33 +03:00 committed by Alexandre Julliard
parent 9164cf8fd9
commit 1580c1133a

View file

@ -161,6 +161,7 @@ static int env_set(char **env, wchar_t **wenv)
*eq = '=';
if (!eq[1])
{
free(MSVCRT__environ[idx]);
for(; MSVCRT__environ[idx]; idx++)
MSVCRT__environ[idx] = MSVCRT__environ[idx + 1];
}
@ -187,6 +188,7 @@ static int env_set(char **env, wchar_t **wenv)
*weq = '=';
if (!weq[1])
{
free(MSVCRT__wenviron[idx]);
for(; MSVCRT__wenviron[idx]; idx++)
MSVCRT__wenviron[idx] = MSVCRT__wenviron[idx + 1];
}