summaryrefslogtreecommitdiff
path: root/ext/domxml/php_domxml.c
diff options
context:
space:
mode:
authorChristian Stocker <chregu@php.net>2002-08-14 08:27:36 +0000
committerChristian Stocker <chregu@php.net>2002-08-14 08:27:36 +0000
commit323765cc17ad43f1659e2f244f6a9d5ebf4bd384 (patch)
tree2a71bc85feeba3a25b7f461f10725502dca31fb3 /ext/domxml/php_domxml.c
parent43bdd6ed73dba6eddc49ddf38218e9e3e59ea503 (diff)
downloadphp-git-323765cc17ad43f1659e2f244f6a9d5ebf4bd384.tar.gz
fix for bug #18395 (DOMXML crash on removing previously created attributes)
Diffstat (limited to 'ext/domxml/php_domxml.c')
-rw-r--r--ext/domxml/php_domxml.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/ext/domxml/php_domxml.c b/ext/domxml/php_domxml.c
index fde6fdfd0a..e389123407 100644
--- a/ext/domxml/php_domxml.c
+++ b/ext/domxml/php_domxml.c
@@ -650,6 +650,17 @@ static void php_free_xml_node(zend_rsrc_list_entry *rsrc TSRMLS_DC)
}
+static void php_free_xml_attr(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+{
+ xmlNodePtr node = (xmlNodePtr) rsrc->ptr;
+ if (node->parent == NULL) {
+ node_wrapper_dtor(node);
+ xmlFreeProp((xmlAttrPtr) node);
+ } else {
+ node_wrapper_dtor(node);
+ }
+}
+
#if defined(LIBXML_XPATH_ENABLED)
static void php_free_xpath_context(zend_rsrc_list_entry *rsrc TSRMLS_DC)
@@ -1525,7 +1536,7 @@ PHP_MINIT_FUNCTION(domxml)
*/
le_domxmlnodep = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domnode", module_number);
le_domxmlcommentp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domcomment", module_number);
- le_domxmlattrp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domattribute", module_number);
+ le_domxmlattrp = zend_register_list_destructors_ex(php_free_xml_attr, NULL, "domattribute", module_number);
le_domxmltextp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domtext", module_number);
le_domxmlelementp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domelement", module_number);
le_domxmldtdp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domdtd", module_number);