[libdazzle] muxer: make sure we own a copy of keys



commit ced878b326784273938fad15d5903aee20327b99
Author: Christian Hergert <chergert redhat com>
Date:   Wed Jul 4 01:48:02 2018 -0700

    muxer: make sure we own a copy of keys
    
    These appear to be able to be damaged out from underneath us, so
    make sure that we take a copy of all of the strings before we
    start iterating them.

 src/util/dzl-gtk.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)
---
diff --git a/src/util/dzl-gtk.c b/src/util/dzl-gtk.c
index 34760c9..4395e66 100644
--- a/src/util/dzl-gtk.c
+++ b/src/util/dzl-gtk.c
@@ -410,7 +410,7 @@ dzl_gtk_widget_mux_action_groups (GtkWidget   *widget,
                                   const gchar *mux_key)
 {
   const gchar * const *old_prefixes = NULL;
-  g_autofree const gchar **prefixes = NULL;
+  g_auto(GStrv) prefixes = NULL;
 
   g_return_if_fail (GTK_IS_WIDGET (widget));
   g_return_if_fail (!from_widget || GTK_IS_WIDGET (from_widget));
@@ -444,10 +444,12 @@ dzl_gtk_widget_mux_action_groups (GtkWidget   *widget,
 
   if (from_widget != NULL)
     {
-      prefixes = gtk_widget_list_action_prefixes (from_widget);
+      g_autofree const gchar **tmp = gtk_widget_list_action_prefixes (from_widget);
 
-      if (prefixes != NULL)
+      if (tmp != NULL)
         {
+          prefixes = g_strdupv ((gchar **)tmp);
+
           for (guint i = 0; prefixes [i]; i++)
             {
               GActionGroup *group = gtk_widget_get_action_group (from_widget, prefixes [i]);
@@ -458,14 +460,15 @@ dzl_gtk_widget_mux_action_groups (GtkWidget   *widget,
               if G_UNLIKELY (group == NULL)
                 continue;
 
-              gtk_widget_insert_action_group (widget, prefixes [i], group);
+              gtk_widget_insert_action_group (widget, prefixes[i], group);
             }
         }
     }
 
   /* Store the set of muxed prefixes so that we can unmux them later. */
-  g_object_set_data_full (G_OBJECT (widget), mux_key,
-                          g_strdupv ((gchar **)prefixes),
+  g_object_set_data_full (G_OBJECT (widget),
+                          mux_key,
+                          g_steal_pointer (&prefixes),
                           (GDestroyNotify) g_strfreev);
 }
 


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