[LIBXML2] Update to version 2.9.13. CORE-17766
[reactos.git] / sdk / lib / 3rdparty / libxml2 / tree.c
index c707f59..9d94aa4 100644 (file)
@@ -1596,6 +1596,10 @@ xmlStringGetNodeList(const xmlDoc *doc, const xmlChar *value) {
                         */
                        if (!xmlBufIsEmpty(buf)) {
                            node = xmlNewDocText(doc, NULL);
+                           if (node == NULL) {
+                               if (val != NULL) xmlFree(val);
+                               goto out;
+                           }
                            node->content = xmlBufDetach(buf);
 
                            if (last == NULL) {
@@ -2852,8 +2856,15 @@ xmlSetTreeDoc(xmlNodePtr tree, xmlDocPtr doc) {
                prop = prop->next;
            }
        }
-       if (tree->children != NULL)
+        if (tree->type == XML_ENTITY_REF_NODE) {
+            /*
+             * Clear 'children' which points to the entity declaration
+             * from the original document.
+             */
+            tree->children = NULL;
+        } else if (tree->children != NULL) {
            xmlSetListDoc(tree->children, doc);
+        }
        tree->doc = doc;
     }
 }
@@ -3691,17 +3702,14 @@ xmlFreeNodeList(xmlNodePtr cur) {
        xmlFreeNsList((xmlNsPtr) cur);
        return;
     }
-    if ((cur->type == XML_DOCUMENT_NODE) ||
-#ifdef LIBXML_DOCB_ENABLED
-       (cur->type == XML_DOCB_DOCUMENT_NODE) ||
-#endif
-       (cur->type == XML_HTML_DOCUMENT_NODE)) {
-       xmlFreeDoc((xmlDocPtr) cur);
-       return;
-    }
     if (cur->doc != NULL) dict = cur->doc->dict;
     while (1) {
         while ((cur->children != NULL) &&
+               (cur->type != XML_DOCUMENT_NODE) &&
+#ifdef LIBXML_DOCB_ENABLED
+               (cur->type != XML_DOCB_DOCUMENT_NODE) &&
+#endif
+               (cur->type != XML_HTML_DOCUMENT_NODE) &&
                (cur->type != XML_DTD_NODE) &&
                (cur->type != XML_ENTITY_REF_NODE)) {
             cur = cur->children;
@@ -3710,7 +3718,13 @@ xmlFreeNodeList(xmlNodePtr cur) {
 
         next = cur->next;
         parent = cur->parent;
-       if (cur->type != XML_DTD_NODE) {
+       if ((cur->type == XML_DOCUMENT_NODE) ||
+#ifdef LIBXML_DOCB_ENABLED
+            (cur->type == XML_DOCB_DOCUMENT_NODE) ||
+#endif
+            (cur->type == XML_HTML_DOCUMENT_NODE)) {
+            xmlFreeDoc((xmlDocPtr) cur);
+        } else if (cur->type != XML_DTD_NODE) {
 
            if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
                xmlDeregisterNodeDefaultValue(cur);
@@ -3724,11 +3738,6 @@ xmlFreeNodeList(xmlNodePtr cur) {
                (cur->type != XML_XINCLUDE_START) &&
                (cur->type != XML_XINCLUDE_END) &&
                (cur->type != XML_ENTITY_REF_NODE) &&
-               (cur->type != XML_DOCUMENT_NODE) &&
-#ifdef LIBXML_DOCB_ENABLED
-               (cur->type != XML_DOCB_DOCUMENT_NODE) &&
-#endif
-               (cur->type != XML_HTML_DOCUMENT_NODE) &&
                (cur->content != (xmlChar *) &(cur->properties))) {
                DICT_FREE(cur->content)
            }