From b12e0b886936099a5bcca834a582b3e51241bd4c Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Wed, 31 Aug 2016 19:09:52 +0200 Subject: [PATCH] goption: Don't return pointers to deallocated memory g_option_context_parse() can return pointers to deallocated strings, if the command line contains an unknown option. https://bugzilla.gnome.org/show_bug.cgi?id=646926 --- glib/goption.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/glib/goption.c b/glib/goption.c index 0464c2e0b..3afdc96d2 100644 --- a/glib/goption.c +++ b/glib/goption.c @@ -1281,9 +1281,12 @@ parse_arg (GOptionContext *context, change = get_change (context, G_OPTION_ARG_STRING, entry->arg_data); - g_free (change->allocated.str); - change->prev.str = *(gchar **)entry->arg_data; + if (!change->allocated.str) + change->prev.str = *(gchar **)entry->arg_data; + else + g_free (change->allocated.str); + change->allocated.str = data; *(gchar **)entry->arg_data = data; @@ -1345,9 +1348,12 @@ parse_arg (GOptionContext *context, #endif change = get_change (context, G_OPTION_ARG_FILENAME, entry->arg_data); - g_free (change->allocated.str); - change->prev.str = *(gchar **)entry->arg_data; + if (!change->allocated.str) + change->prev.str = *(gchar **)entry->arg_data; + else + g_free (change->allocated.str); + change->allocated.str = data; *(gchar **)entry->arg_data = data;