summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2019-06-03 23:05:33 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2019-06-03 23:05:33 +0100
commit75d1197eadd7b004f93b1096bc02121c280d794f (patch)
tree0f620eecc0d9de51e0c178c738d49dd213183835
parent6c0b6f831fe4de450b4e89a942177829733e10b5 (diff)
downloadlibdom-75d1197eadd7b004f93b1096bc02121c280d794f.tar.gz
libdom-75d1197eadd7b004f93b1096bc02121c280d794f.tar.bz2
node.c: _dom_node_set_text_content() fix leaks
There were a number of text node leaks in the function to set a node's text content. This corrects those. Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
-rw-r--r--src/core/node.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/core/node.c b/src/core/node.c
index 2bd95d3..87ad837 100644
--- a/src/core/node.c
+++ b/src/core/node.c
@@ -1502,6 +1502,8 @@ dom_exception _dom_node_set_text_content(dom_node_internal *node,
err = dom_node_remove_child(node, p, (void *) &r);
if (err != DOM_NO_ERR)
return err;
+ /* The returned node was reffed, so unref it */
+ dom_node_unref(r);
}
doc = node->owner;
@@ -1510,12 +1512,15 @@ dom_exception _dom_node_set_text_content(dom_node_internal *node,
err = dom_document_create_text_node(doc, content, &text);
if (err != DOM_NO_ERR)
return err;
-
+
err = dom_node_append_child(node, text, (void *) &r);
- if (err != DOM_NO_ERR)
- return err;
- return DOM_NO_ERR;
+ /* The node is held alive as a child here, so unref it */
+ dom_node_unref(text);
+ /* And unref it a second time because append_child reffed it too */
+ dom_node_unref(r);
+
+ return err;
}
/**