summaryrefslogtreecommitdiff
path: root/ext/dom/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/dom/node.c')
-rw-r--r--ext/dom/node.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/ext/dom/node.c b/ext/dom/node.c
index b4ab9f896a..b4a081ebe9 100644
--- a/ext/dom/node.c
+++ b/ext/dom/node.c
@@ -337,6 +337,8 @@ int dom_node_node_value_write(dom_object *obj, zval *newval)
case XML_ATTRIBUTE_NODE:
if (nodep->children) {
node_list_unlink(nodep->children);
+ php_libxml_node_free_list((xmlNodePtr) nodep->children);
+ nodep->children = NULL;
}
case XML_TEXT_NODE:
case XML_COMMENT_NODE:
@@ -854,6 +856,14 @@ int dom_node_text_content_write(dom_object *obj, zval *newval)
return FAILURE;
}
+ if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE) {
+ if (nodep->children) {
+ node_list_unlink(nodep->children);
+ php_libxml_node_free_list((xmlNodePtr) nodep->children);
+ nodep->children = NULL;
+ }
+ }
+
str = zval_get_string(newval);
/* we have to use xmlNodeAddContent() to get the same behavior as with xmlNewText() */
xmlNodeSetContent(nodep, (xmlChar *) "");