diff options
author | Markus Fischer <mfischer@php.net> | 2001-12-20 14:40:43 +0000 |
---|---|---|
committer | Markus Fischer <mfischer@php.net> | 2001-12-20 14:40:43 +0000 |
commit | 529761f0f78d8fe31fd73603345d130ee07cc684 (patch) | |
tree | 29e99acc831d43b277e72deec4abad573a3c46ca | |
parent | d9149f023d94a6eff46360f5080d61244e7a03a8 (diff) | |
download | php-git-529761f0f78d8fe31fd73603345d130ee07cc684.tar.gz |
- Fix crash with EntityRef nodes (and properly support them).
-rw-r--r-- | ext/domxml/php_domxml.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/ext/domxml/php_domxml.c b/ext/domxml/php_domxml.c index 40b29027ba..3eccb247a4 100644 --- a/ext/domxml/php_domxml.c +++ b/ext/domxml/php_domxml.c @@ -411,9 +411,14 @@ static inline void node_list_wrapper_dtor(xmlNodePtr node) { while (node != NULL) { node_list_wrapper_dtor(node->children); - // FIXME temporary fix; think of something better - if (node->type != XML_ATTRIBUTE_DECL && node->type != XML_DTD_NODE) { - attr_list_wrapper_dtor(node->properties); + switch (node->type) { + /* Skip property freeing for the following types */ + case XML_ATTRIBUTE_DECL: + case XML_DTD_NODE: + case XML_ENTITY_DECL: + break; + default: + attr_list_wrapper_dtor(node->properties); } node_wrapper_dtor(node); node = node->next; @@ -817,7 +822,6 @@ static zval *php_domobject_new(xmlNodePtr obj, int *found TSRMLS_DC) xmlNodePtr nodep = obj; object_init_ex(wrapper, domxmlentityref_class_entry); rsrc_type = le_domxmlentityrefp; - content = xmlNodeGetContent(nodep); add_property_stringl(wrapper, "name", (char *) nodep->name, strlen(nodep->name), 1); break; } @@ -932,12 +936,12 @@ PHP_MINIT_FUNCTION(domxml) 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); le_domxmlcdatap = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domcdata", module_number); + le_domxmlentityrefp = zend_register_list_destructors_ex(php_free_xml_node, NULL, "domentityref", module_number); /* Not yet initialized le_*s */ le_domxmldoctypep = -10000; le_domxmlpip = -10002; le_domxmlnotationp = -10003; - le_domxmlentityrefp = -10004; #if defined(LIBXML_XPATH_ENABLED) le_xpathctxp = zend_register_list_destructors_ex(php_free_xpath_context, NULL, "xpathcontext", module_number); |