mirror of https://github.com/xemu-project/xemu.git
win32: fix memory leak
string is allocated by g_malloc, will not be used after putenv, should be free before return. Paolo Bonzini <pbonzini@redhat.com> confirmed this is safe under Wine: "1) the underlying Win32 APIs require separate arguments for the variable and value; 2) even though in the end Wine stores the environment as name=value (http://source.winehq.org/source/dlls/ntdll/env.c), it does so in a single consecutive block of memory, not as a char* array like POSIX does. While (2) might apply only to Wine, (1) surely applies to Windows as well." Tested-by: Stefan Weil <sw@weilnetz.de> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Li Zhi Hui <zhihuili@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
This commit is contained in:
parent
c7ee8f683d
commit
91a9ecefb6
|
@ -44,6 +44,13 @@ int setenv(const char *name, const char *value, int overwrite)
|
|||
char *string = g_malloc(length);
|
||||
snprintf(string, length, "%s=%s", name, value);
|
||||
result = putenv(string);
|
||||
|
||||
/* Windows takes a copy and does not continue to use our string.
|
||||
* Therefore it can be safely freed on this platform. POSIX code
|
||||
* typically has to leak the string because according to the spec it
|
||||
* becomes part of the environment.
|
||||
*/
|
||||
g_free(string);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue