[gimp] libgimp: don't leak the temp callback name in the data select impls



commit d34bc03229211264ecd1cf8d29a478c332c9856b
Author: Michael Natterer <mitch gimp org>
Date:   Sun Aug 4 18:04:18 2019 +0200

    libgimp: don't leak the temp callback name in the data select impls

 libgimp/gimpbrushselect.c    | 11 ++++++++---
 libgimp/gimpfontselect.c     | 22 ++++++++++++++--------
 libgimp/gimpgradientselect.c | 27 ++++++++++++++++-----------
 libgimp/gimppaletteselect.c  | 23 ++++++++++++++---------
 libgimp/gimppatternselect.c  | 31 ++++++++++++++++++-------------
 5 files changed, 70 insertions(+), 44 deletions(-)
---
diff --git a/libgimp/gimpbrushselect.c b/libgimp/gimpbrushselect.c
index 0db5389664..16fad6d094 100644
--- a/libgimp/gimpbrushselect.c
+++ b/libgimp/gimpbrushselect.c
@@ -207,7 +207,8 @@ gimp_brush_select_new (const gchar          *title,
                                        (GDestroyNotify) gimp_brush_data_free);
             }
 
-          g_hash_table_insert (gimp_brush_select_ht, brush_callback,
+          g_hash_table_insert (gimp_brush_select_ht,
+                               g_strdup (brush_callback),
                                brush_data);
         }
 
@@ -268,7 +269,10 @@ gimp_brush_data_free (GimpBrushData *data)
     g_source_remove (data->idle_id);
 
   if (data->brush_callback)
-    gimp_brushes_close_popup (data->brush_callback);
+    {
+      gimp_brushes_close_popup (data->brush_callback);
+      g_free (data->brush_callback);
+    }
 
   g_free (data->brush_name);
   g_free (data->brush_mask_data);
@@ -370,7 +374,8 @@ gimp_temp_brush_run_idle (GimpBrushData *brush_data)
 
       brush_data->brush_callback = NULL;
       gimp_brush_select_destroy (brush_callback);
+      g_free (brush_callback);
     }
 
-  return FALSE;
+  return G_SOURCE_REMOVE;
 }
diff --git a/libgimp/gimpfontselect.c b/libgimp/gimpfontselect.c
index ffb1123860..07a782576d 100644
--- a/libgimp/gimpfontselect.c
+++ b/libgimp/gimpfontselect.c
@@ -106,11 +106,11 @@ gimp_font_select_new (const gchar         *title,
   else
     {
       static const GimpParamDef args[] =
-        {
-         { GIMP_PDB_STRING, "str",           "String"                     },
-         { GIMP_PDB_INT32,  "dialog status", "If the dialog was closing "
-                                             "[0 = No, 1 = Yes]"          }
-        };
+      {
+        { GIMP_PDB_STRING, "str",           "String"                     },
+        { GIMP_PDB_INT32,  "dialog status", "If the dialog was closing "
+                                            "[0 = No, 1 = Yes]"          }
+      };
 
       gimp_install_temp_proc (font_callback,
                               "Temporary font popup callback procedure",
@@ -146,7 +146,9 @@ gimp_font_select_new (const gchar         *title,
                                        (GDestroyNotify) gimp_font_data_free);
             }
 
-          g_hash_table_insert (gimp_font_select_ht, font_callback, font_data);
+          g_hash_table_insert (gimp_font_select_ht,
+                               g_strdup (font_callback),
+                               font_data);
         }
 
       return font_callback;
@@ -208,7 +210,10 @@ gimp_font_data_free (GimpFontData *data)
   g_free (data->font_name);
 
   if (data->font_callback)
-    gimp_fonts_close_popup (data->font_callback);
+    {
+      gimp_fonts_close_popup (data->font_callback);
+      g_free (data->font_callback);
+    }
 
   if (data->data_destroy)
     data->data_destroy (data->data);
@@ -286,7 +291,8 @@ gimp_temp_font_run_idle (GimpFontData *font_data)
 
       font_data->font_callback = NULL;
       gimp_font_select_destroy (font_callback);
+      g_free (font_callback);
     }
 
-  return FALSE;
+  return G_SOURCE_REMOVE;
 }
diff --git a/libgimp/gimpgradientselect.c b/libgimp/gimpgradientselect.c
index 7a7ac5960a..92353f4d36 100644
--- a/libgimp/gimpgradientselect.c
+++ b/libgimp/gimpgradientselect.c
@@ -68,7 +68,7 @@ gimp_gradient_select_new (const gchar             *title,
                           gpointer                 data,
                           GDestroyNotify           data_destroy)
 {
-  GimpPlugIn       *plug_in        = gimp_get_plug_in ();
+  GimpPlugIn       *plug_in           = gimp_get_plug_in ();
   gchar            *gradient_callback = gimp_procedural_db_temp_name ();
   GimpGradientData *gradient_data;
 
@@ -121,13 +121,13 @@ gimp_gradient_select_new (const gchar             *title,
   else
     {
       static const GimpParamDef args[] =
-        {
-         { GIMP_PDB_STRING,    "str",            "String"                     },
-         { GIMP_PDB_INT32,     "gradient width", "Gradient width"             },
-         { GIMP_PDB_FLOATARRAY,"gradient data",  "The gradient mask data"     },
-         { GIMP_PDB_INT32,     "dialog status",  "If the dialog was closing "
-                                                 "[0 = No, 1 = Yes]"          }
-        };
+      {
+        { GIMP_PDB_STRING,    "str",            "String"                     },
+        { GIMP_PDB_INT32,     "gradient width", "Gradient width"             },
+        { GIMP_PDB_FLOATARRAY,"gradient data",  "The gradient mask data"     },
+        { GIMP_PDB_INT32,     "dialog status",  "If the dialog was closing "
+                                                "[0 = No, 1 = Yes]"          }
+      };
 
       gimp_install_temp_proc (gradient_callback,
                               "Temporary gradient popup callback procedure",
@@ -166,7 +166,8 @@ gimp_gradient_select_new (const gchar             *title,
 
 
           g_hash_table_insert (gimp_gradient_select_ht,
-                               gradient_callback, gradient_data);
+                               g_strdup (gradient_callback),
+                               gradient_data);
         }
 
       return gradient_callback;
@@ -227,7 +228,10 @@ gimp_gradient_data_free (GimpGradientData *data)
     g_source_remove (data->idle_id);
 
   if (data->gradient_callback)
-    gimp_gradients_close_popup (data->gradient_callback);
+    {
+      gimp_gradients_close_popup (data->gradient_callback);
+      g_free (data->gradient_callback);
+    }
 
   g_free (data->gradient_name);
   g_free (data->gradient_data);
@@ -319,7 +323,8 @@ gimp_temp_gradient_run_idle (GimpGradientData *gradient_data)
 
       gradient_data->gradient_callback = NULL;
       gimp_gradient_select_destroy (gradient_callback);
+      g_free (gradient_callback);
     }
 
-  return FALSE;
+  return G_SOURCE_REMOVE;
 }
diff --git a/libgimp/gimppaletteselect.c b/libgimp/gimppaletteselect.c
index 02d3862492..d69224ac8d 100644
--- a/libgimp/gimppaletteselect.c
+++ b/libgimp/gimppaletteselect.c
@@ -113,12 +113,12 @@ gimp_palette_select_new (const gchar            *title,
   else
     {
       static const GimpParamDef args[] =
-        {
-         { GIMP_PDB_STRING, "str",           "String"                      },
-         { GIMP_PDB_INT32,  "num colors",    "Number of colors"            },
-         { GIMP_PDB_INT32,  "dialog status", "If the dialog was closing "
-                                              "[0 = No, 1 = Yes]"           }
-        };
+      {
+        { GIMP_PDB_STRING, "str",           "String"                      },
+        { GIMP_PDB_INT32,  "num colors",    "Number of colors"            },
+        { GIMP_PDB_INT32,  "dialog status", "If the dialog was closing "
+                                            "[0 = No, 1 = Yes]"           }
+      };
 
       gimp_install_temp_proc (palette_callback,
                               "Temporary palette popup callback procedure",
@@ -155,7 +155,8 @@ gimp_palette_select_new (const gchar            *title,
             }
 
           g_hash_table_insert (gimp_palette_select_ht,
-                               palette_callback, palette_data);
+                               g_strdup (palette_callback),
+                               palette_data);
         }
 
       return palette_callback;
@@ -216,7 +217,10 @@ gimp_palette_data_free (GimpPaletteData *data)
     g_source_remove (data->idle_id);
 
   if (data->palette_callback)
-    gimp_palettes_close_popup (data->palette_callback);
+    {
+      gimp_palettes_close_popup (data->palette_callback);
+      g_free (data->palette_callback);
+    }
 
   g_free (data->palette_name);
 
@@ -298,7 +302,8 @@ gimp_temp_palette_run_idle (GimpPaletteData *palette_data)
 
       palette_data->palette_callback = NULL;
       gimp_palette_select_destroy (palette_callback);
+      g_free (palette_callback);
     }
 
-  return FALSE;
+  return G_SOURCE_REMOVE;
 }
diff --git a/libgimp/gimppatternselect.c b/libgimp/gimppatternselect.c
index 463969c397..288e3081a7 100644
--- a/libgimp/gimppatternselect.c
+++ b/libgimp/gimppatternselect.c
@@ -142,16 +142,16 @@ gimp_pattern_select_new (const gchar            *title,
   else
     {
       static const GimpParamDef args[] =
-        {
-         { GIMP_PDB_STRING,   "str",           "String"                      },
-         { GIMP_PDB_INT32,    "mask width",    "Pattern width"               },
-         { GIMP_PDB_INT32,    "mask height",   "Pattern height"              },
-         { GIMP_PDB_INT32,    "mask bpp",      "Pattern bytes per pixel"     },
-         { GIMP_PDB_INT32,    "mask len",      "Length of pattern mask data" },
-         { GIMP_PDB_INT8ARRAY,"mask data",     "The pattern mask data"       },
-         { GIMP_PDB_INT32,    "dialog status", "If the dialog was closing "
-                                               "[0 = No, 1 = Yes]"           }
-        };
+      {
+        { GIMP_PDB_STRING,   "str",           "String"                      },
+        { GIMP_PDB_INT32,    "mask width",    "Pattern width"               },
+        { GIMP_PDB_INT32,    "mask height",   "Pattern height"              },
+        { GIMP_PDB_INT32,    "mask bpp",      "Pattern bytes per pixel"     },
+        { GIMP_PDB_INT32,    "mask len",      "Length of pattern mask data" },
+        { GIMP_PDB_INT8ARRAY,"mask data",     "The pattern mask data"       },
+        { GIMP_PDB_INT32,    "dialog status", "If the dialog was closing "
+                                              "[0 = No, 1 = Yes]"           }
+      };
 
       gimp_install_temp_proc (pattern_callback,
                               "Temporary pattern popup callback procedure",
@@ -188,7 +188,8 @@ gimp_pattern_select_new (const gchar            *title,
             }
 
           g_hash_table_insert (gimp_pattern_select_ht,
-                               pattern_callback, pattern_data);
+                               g_strdup (pattern_callback),
+                               pattern_data);
         }
 
       return pattern_callback;
@@ -249,7 +250,10 @@ gimp_pattern_data_free (GimpPatternData *data)
     g_source_remove (data->idle_id);
 
   if (data->pattern_callback)
-    gimp_patterns_close_popup (data->pattern_callback);
+    {
+      gimp_patterns_close_popup (data->pattern_callback);
+      g_free (data->pattern_callback);
+    }
 
   g_free (data->pattern_name);
   g_free (data->pattern_mask_data);
@@ -345,7 +349,8 @@ gimp_temp_pattern_run_idle (GimpPatternData *pattern_data)
 
       pattern_data->pattern_callback = NULL;
       gimp_pattern_select_destroy (pattern_callback);
+      g_free (pattern_callback);
     }
 
-  return FALSE;
+  return G_SOURCE_REMOVE;
 }


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