summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2020-08-24 12:42:58 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2020-08-24 17:44:07 +0100
commit3978fc21c75f527f1220c15c9e2427c6a0b7a08d (patch)
tree10b0fa7e70aedae678dffd18e7e0b75ee18f2228
parent179fe250d6be400566c79e1d83bb45c07e975183 (diff)
downloadjson-glib-3978fc21c75f527f1220c15c9e2427c6a0b7a08d.tar.gz
Assert that foreach_member() won't mutate the object
We document that it's not safe, but we kind of rely on GHashTable to do that for us. Instead, let's use the newly added age field to protect against accidental mutations during iteration, just like we do for the iterator API.
-rw-r--r--json-glib/json-object.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/json-glib/json-object.c b/json-glib/json-object.c
index a17fd6d..8555eb9 100644
--- a/json-glib/json-object.c
+++ b/json-glib/json-object.c
@@ -968,16 +968,21 @@ json_object_foreach_member (JsonObject *object,
gpointer data)
{
GList *l;
+ int age;
g_return_if_fail (object != NULL);
g_return_if_fail (func != NULL);
+ age = object->age;
+
for (l = object->members_ordered.head; l != NULL; l = l->next)
{
const gchar *member_name = l->data;
JsonNode *member_node = g_hash_table_lookup (object->members, member_name);
func (object, member_name, member_node, data);
+
+ g_assert (object->age == age);
}
}