[glib] goption: Don't return pointers to deallocated memory



commit b12e0b886936099a5bcca834a582b3e51241bd4c
Author: Kjell Ahlstedt <kjell ahlstedt bredband net>
Date:   Wed Aug 31 19:09:52 2016 +0200

    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 files changed, 10 insertions(+), 4 deletions(-)
---
diff --git a/glib/goption.c b/glib/goption.c
index 0464c2e..3afdc96 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;


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