Browse Source

- Fix crash with EntityRef nodes (and properly support them).

experimental/ZendEngine2
Markus Fischer 25 years ago
parent
commit
529761f0f7
  1. 14
      ext/domxml/php_domxml.c

14
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);

Loading…
Cancel
Save