qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 07/19] win32: fix memory leak


From: Stefan Hajnoczi
Subject: [Qemu-devel] [PATCH 07/19] win32: fix memory leak
Date: Tue, 6 Dec 2011 11:01:02 +0000

From: Zhi Hui Li <address@hidden>

string is allocated by g_malloc, will not be used after putenv, should be
free before return.

Paolo Bonzini <address@hidden> 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 <address@hidden>
Reviewed-by: Paolo Bonzini <address@hidden>
Signed-off-by: Li Zhi Hui <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
 os-win32.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/os-win32.c b/os-win32.c
index 8ad5fa1..8523d8d 100644
--- a/os-win32.c
+++ b/os-win32.c
@@ -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;
 }
-- 
1.7.7.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]