diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-08-18 12:00:41 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-08-18 12:00:41 +0000 |
commit | 81e5d4c327f0898fc1701a3ec592247383159c6e (patch) | |
tree | 58a9dffd42f6647080392d97d3d7246035205142 | |
parent | c020e83890d9127b8dcb448388194f249ac820e7 (diff) | |
parent | f8111125ef74ccb814d10359295fb4b000b2f410 (diff) | |
download | gtk+-81e5d4c327f0898fc1701a3ec592247383159c6e.tar.gz |
Merge branch 'master' into 'master'
gtkbuilderparser: Fix duplicate object id detection
See merge request GNOME/gtk!3848
-rw-r--r-- | gtk/gtkbuilderparser.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c index 3f180b0f42..b9efb13fae 100644 --- a/gtk/gtkbuilderparser.c +++ b/gtk/gtkbuilderparser.c @@ -573,6 +573,8 @@ parse_object (GtkBuildableParseContext *context, const char *object_id = NULL; char *internal_id = NULL; int line; + gpointer line_ptr; + gboolean has_duplicate; child_info = state_peek_info (data, ChildInfo); if (child_info && child_info->tag_type == TAG_OBJECT) @@ -673,14 +675,14 @@ parse_object (GtkBuildableParseContext *context, object_info->parent = (CommonInfo*)child_info; state_push (data, object_info); - line = GPOINTER_TO_INT (g_hash_table_lookup (data->object_ids, object_id)); - if (line != 0) + has_duplicate = g_hash_table_lookup_extended (data->object_ids, object_id, NULL, &line_ptr); + if (has_duplicate != 0) { g_set_error (error, GTK_BUILDER_ERROR, GTK_BUILDER_ERROR_DUPLICATE_ID, "Duplicate object ID '%s' (previously on line %d)", - object_id, line); + object_id, GPOINTER_TO_INT (line_ptr)); _gtk_builder_prefix_error (data->builder, context, error); return; } @@ -701,6 +703,8 @@ parse_template (GtkBuildableParseContext *context, const char *object_class = NULL; const char *parent_class = NULL; int line; + gpointer line_ptr; + gboolean has_duplicate; GType template_type; GType parsed_type; @@ -777,14 +781,14 @@ parse_template (GtkBuildableParseContext *context, object_info->object = gtk_builder_get_object (data->builder, object_class); state_push (data, object_info); - line = GPOINTER_TO_INT (g_hash_table_lookup (data->object_ids, object_class)); - if (line != 0) + has_duplicate = g_hash_table_lookup_extended (data->object_ids, object_class, NULL, &line_ptr); + if (has_duplicate != 0) { g_set_error (error, GTK_BUILDER_ERROR, GTK_BUILDER_ERROR_DUPLICATE_ID, "Duplicate object ID '%s' (previously on line %d)", - object_class, line); + object_class, GPOINTER_TO_INT (line_ptr)); _gtk_builder_prefix_error (data->builder, context, error); return; } |