summaryrefslogtreecommitdiff
path: root/json-glib/tests
diff options
context:
space:
mode:
authorOle André Vadla Ravnås <oleavr@gmail.com>2020-08-24 17:00:50 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2020-08-24 17:16:26 +0100
commit73b4f5d3e25d0ecfafd390a880365ffa858f0e73 (patch)
tree83121668db475255e4bb8ef582f3bda83bb1cd3f /json-glib/tests
parenta697f050bac783d4f1dadfaf4d7407e003a94bef (diff)
downloadjson-glib-deep-copy.tar.gz
Fix copy behavior for complex typesdeep-copy
The parent of the reffed children were previously left pointing to the original node. In the best-case scenario this would lead to inconsistent state when walking down a tree and then walking back up again. In the worst-case scenario this would happen when the original node had a shorter life-time than the copy, resulting in use-after-free. A typical scenario where this went wrong was with json_from_string(), which would copy the root node, let go of the last reference to the root node, and then return the copy. The copy would then have dangling `parent` pointers. This probably went unnoticed for most use-cases, but would go terribly wrong if someone used a JsonReader and navigated back up the tree by e.g. calling end_member(). Fixes: #20 Fixes: #32
Diffstat (limited to 'json-glib/tests')
-rw-r--r--json-glib/tests/node.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/json-glib/tests/node.c b/json-glib/tests/node.c
index 80beb78..abab8f0 100644
--- a/json-glib/tests/node.c
+++ b/json-glib/tests/node.c
@@ -91,7 +91,7 @@ test_copy_object (void)
copy = json_node_copy (node);
g_assert_cmpint (json_node_get_node_type (node), ==, json_node_get_node_type (copy));
- g_assert (json_node_get_object (node) == json_node_get_object (copy));
+ g_assert (json_node_get_object (node) != json_node_get_object (copy));
json_node_free (copy);
json_node_free (node);