mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 06:56:14 +01:00
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
This commit is contained in:
parent
11819933e2
commit
6007a4b0b1
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user