[gtk+] Fix duplicated id detection in gtkbuilder



commit 6cfb23d185254ab1402c66508e02f6e7942b1a2c
Author: Paolo Borelli <pborelli gnome org>
Date:   Fri Aug 14 00:08:09 2009 +0200

    Fix duplicated id detection in gtkbuilder
    
    Fix memory handling of duplicated id hashtable and add unit test

 gtk/gtkbuilderparser.c |    6 ++++--
 gtk/tests/builder.c    |    9 ++++++++-
 2 files changed, 12 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c
index f6f12a5..fa89421 100644
--- a/gtk/gtkbuilderparser.c
+++ b/gtk/gtkbuilderparser.c
@@ -404,7 +404,8 @@ parse_object (GMarkupParseContext  *context,
       return;
     }
 
-  g_hash_table_insert (data->object_ids, object_id, GINT_TO_POINTER (line));
+
+  g_hash_table_insert (data->object_ids, g_strdup (object_id), GINT_TO_POINTER (line));
 }
 
 static void
@@ -1128,7 +1129,8 @@ _gtk_builder_parser_parse_buffer (GtkBuilder   *builder,
   data->builder = builder;
   data->filename = filename;
   data->domain = g_strdup (domain);
-  data->object_ids = g_hash_table_new (g_str_hash, g_str_equal);
+  data->object_ids = g_hash_table_new_full (g_str_hash, g_str_equal,
+					    (GDestroyNotify)g_free, NULL);
 
   data->requested_objects = NULL;
   if (requested_objs)
diff --git a/gtk/tests/builder.c b/gtk/tests/builder.c
index f5a85ac..2a653b5 100644
--- a/gtk/tests/builder.c
+++ b/gtk/tests/builder.c
@@ -116,6 +116,13 @@ test_parser (void)
                              GTK_BUILDER_ERROR_INVALID_VALUE));
   g_error_free (error);
 
+  error = NULL;
+  gtk_builder_add_from_string (builder, "<interface><object class=\"GtkButton\" id=\"a\"></object><object class=\"GtkButton\" id=\"a\"/></object></interface>", -1, &error);
+  g_assert (g_error_matches (error,
+                             GTK_BUILDER_ERROR,
+                             GTK_BUILDER_ERROR_DUPLICATE_ID));
+  g_error_free (error);
+
   g_object_unref (builder);
 }
 
@@ -2172,7 +2179,7 @@ test_add_objects (void)
     "  </object>"
     "  <object class=\"GtkWindow\" id=\"window2\">"
     "    <child>"
-    "      <object class=\"GtkLabel\" id=\"label1\">"
+    "      <object class=\"GtkLabel\" id=\"label3\">"
     "        <property name=\"label\" translatable=\"no\">second label</property>"
     "      </object>"
     "    </child>"



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