diff --git a/ChangeLog b/ChangeLog index e609495f..cea024b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sat Jun 9 16:10:36 CEST 2001 Daniel Veillard + + * xinclude.c: Raphael Hertzog had a trouble with DTD nodes + being processed, applied his patch + * tree.c: fixed a bug raised in xmlStaticCopyNodeList() + Sat Jun 9 15:50:11 CEST 2001 Daniel Veillard * nanoftp.c nanohttp.c uri.c include/win32config.h: Igor Zlatkovic diff --git a/tree.c b/tree.c index 0f106738..5027fcfa 100644 --- a/tree.c +++ b/tree.c @@ -2750,6 +2750,10 @@ xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent) { while (node != NULL) { if( node->type == XML_DTD_NODE ) { + if (doc == NULL) { + node = node->next; + continue; + } if (doc->intSubset == NULL) { q = (xmlNodePtr) xmlCopyDtd( (xmlDtdPtr) node ); q->doc = doc; diff --git a/xinclude.c b/xinclude.c index 3b31001d..0909d3eb 100644 --- a/xinclude.c +++ b/xinclude.c @@ -407,12 +407,26 @@ loaded: if (fragment == NULL) { /* * Add the top children list as the replacement copy. - * ISSUE: seems we should scrap DTD info from the copied list. */ if (doc == NULL) + { + /* Hopefully a DTD declaration won't be copied from + * the same document */ ctxt->repTab[nr] = xmlCopyNodeList(ctxt->doc->children); - else + } else { + /* DTD declarations can't be copied from included files */ + xmlNodePtr node = doc->children; + while (node != NULL) + { + if (node->type == XML_DTD_NODE) + { + xmlUnlinkNode(node); + xmlFreeNode(node); + } + node = node->next; + } ctxt->repTab[nr] = xmlCopyNodeList(doc->children); + } } else { /* * Computes the XPointer expression and make a copy used