Gitweb links:

...log 
http://git.netsurf-browser.org/libdom.git/shortlog/75d1197eadd7b004f93b1096bc02121c280d794f
...commit 
http://git.netsurf-browser.org/libdom.git/commit/75d1197eadd7b004f93b1096bc02121c280d794f
...tree 
http://git.netsurf-browser.org/libdom.git/tree/75d1197eadd7b004f93b1096bc02121c280d794f

The branch, master has been updated
       via  75d1197eadd7b004f93b1096bc02121c280d794f (commit)
      from  6c0b6f831fe4de450b4e89a942177829733e10b5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/libdom.git/commit/?id=75d1197eadd7b004f93b1096bc02121c280d794f
commit 75d1197eadd7b004f93b1096bc02121c280d794f
Author: Daniel Silverstone <[email protected]>
Commit: Daniel Silverstone <[email protected]>

    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 <[email protected]>

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;
 }
 
 /**


-----------------------------------------------------------------------

Summary of changes:
 src/core/node.c |   13 +++++++++----
 1 file 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;
 }
 
 /**


-- 
Document Object Model library

_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to