From 323765cc17ad43f1659e2f244f6a9d5ebf4bd384 Mon Sep 17 00:00:00 2001 From: Christian Stocker Date: Wed, 14 Aug 2002 08:27:36 +0000 Subject: fix for bug #18395 (DOMXML crash on removing previously created attributes) --- ext/domxml/php_domxml.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'ext/domxml/php_domxml.c') 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); -- cgit v1.2.1