From 6007a4b0b109855f8521ba93ed10b3a1d2bf77f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Mon, 9 Jul 2012 03:54:55 +0200 Subject: [PATCH] win32: fix g_get_environ() The current code create the strv array incorrectly, it is too big and leaves invalid holes. This may result in crashes when freeing the returned value. https://bugzilla.gnome.org/show_bug.cgi?id=679617 --- glib/genviron.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/glib/genviron.c b/glib/genviron.c index 59a8bbec2..4abf77676 100644 --- a/glib/genviron.c +++ b/glib/genviron.c @@ -633,10 +633,15 @@ g_get_environ (void) gint i, n; strings = GetEnvironmentStringsW (); - for (n = 0; strings[n]; n += wcslen (strings + n) + 1); - result = g_new (char *, n + 1); - for (i = 0; strings[i]; i += wcslen (strings + i) + 1) - result[i] = g_utf16_to_utf8 (strings + i, -1, NULL, NULL, NULL); + for (n = 0, i = 0; strings[n]; i++) + n += wcslen (strings + n) + 1; + + result = g_new (char *, i + 1); + for (n = 0, i = 0; strings[n]; i++) + { + result[i] = g_utf16_to_utf8 (strings + n, -1, NULL, NULL, NULL); + n += wcslen (strings + n) + 1; + } FreeEnvironmentStringsW (strings); result[i] = NULL;