1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2024-10-27 04:55:04 +03:00

tree: Fix regression when copying DTDs

This reverts commit d39f78069d.

Fixes #634.
This commit is contained in:
Nick Wellnhofer 2023-11-28 13:01:38 +01:00
parent ec7f65069a
commit de3f70146d

21
tree.c
View File

@ -4301,28 +4301,29 @@ xmlNodePtr
xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent) {
xmlNodePtr ret = NULL;
xmlNodePtr p = NULL,q;
xmlDtdPtr newSubset = NULL;
while (node != NULL) {
if (node->type == XML_DTD_NODE ) {
#ifdef LIBXML_TREE_ENABLED
if ((doc == NULL) || (doc->intSubset != NULL)) {
if (node->type == XML_DTD_NODE ) {
if (doc == NULL) {
node = node->next;
continue;
}
if (doc->intSubset == NULL) {
q = (xmlNodePtr) xmlCopyDtd( (xmlDtdPtr) node );
if (q == NULL) goto error;
q->doc = doc;
q->parent = parent;
newSubset = (xmlDtdPtr) q;
#else
node = node->next;
continue;
#endif /* LIBXML_TREE_ENABLED */
doc->intSubset = (xmlDtdPtr) q;
xmlAddChild(parent, q);
} else {
q = (xmlNodePtr) doc->intSubset;
xmlAddChild(parent, q);
}
} else
#endif /* LIBXML_TREE_ENABLED */
q = xmlStaticCopyNode(node, doc, parent, 1);
if (q == NULL) goto error;
}
if (ret == NULL) {
q->prev = NULL;
ret = p = q;
@ -4334,8 +4335,6 @@ xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent) {
}
node = node->next;
}
if (newSubset != NULL)
doc->intSubset = newSubset;
return(ret);
error:
xmlFreeNodeList(ret);