]> granicus.if.org Git - php/commitdiff
- Fix crash with EntityRef nodes (and properly support them).
authorMarkus Fischer <mfischer@php.net>
Thu, 20 Dec 2001 14:40:43 +0000 (14:40 +0000)
committerMarkus Fischer <mfischer@php.net>
Thu, 20 Dec 2001 14:40:43 +0000 (14:40 +0000)
ext/domxml/php_domxml.c

index 40b29027ba24abde67dafae6f05ca308fb725c6e..3eccb247a491610e87ca31003c64b37e511e4547 100644 (file)
@@ -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);