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);
|
char *string = g_malloc(length);
|
||||||
snprintf(string, length, "%s=%s", name, value);
|
snprintf(string, length, "%s=%s", name, value);
|
||||||
result = putenv(string);
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue