forked from Mirrors/wine-wine
ntdll: Avoid leaking the previous environment in RtlSetCurrentEnvironment().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>feature/deterministic
parent
d98b87a317
commit
e012bd5811
|
@ -996,14 +996,21 @@ NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR env,
|
||||||
*/
|
*/
|
||||||
void WINAPI RtlSetCurrentEnvironment(PWSTR new_env, PWSTR* old_env)
|
void WINAPI RtlSetCurrentEnvironment(PWSTR new_env, PWSTR* old_env)
|
||||||
{
|
{
|
||||||
|
WCHAR *prev;
|
||||||
|
|
||||||
TRACE("(%p %p)\n", new_env, old_env);
|
TRACE("(%p %p)\n", new_env, old_env);
|
||||||
|
|
||||||
RtlAcquirePebLock();
|
RtlAcquirePebLock();
|
||||||
|
|
||||||
if (old_env) *old_env = NtCurrentTeb()->Peb->ProcessParameters->Environment;
|
prev = NtCurrentTeb()->Peb->ProcessParameters->Environment;
|
||||||
NtCurrentTeb()->Peb->ProcessParameters->Environment = new_env;
|
NtCurrentTeb()->Peb->ProcessParameters->Environment = new_env;
|
||||||
|
|
||||||
RtlReleasePebLock();
|
RtlReleasePebLock();
|
||||||
|
|
||||||
|
if (old_env)
|
||||||
|
*old_env = prev;
|
||||||
|
else
|
||||||
|
RtlDestroyEnvironment( prev );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue