mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2024-10-26 12:25:09 +03:00
xinclude: Don't pass documents to xmlXIncludeCopyNode
Extract the root element directly in xmlXIncludeCopyXPointer.
This commit is contained in:
parent
46e4cfb643
commit
bc32c3862c
42
xinclude.c
42
xinclude.c
@ -844,11 +844,9 @@ xmlXIncludeCopyNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr elem) {
|
||||
|
||||
if ((ctxt == NULL) || (elem == NULL))
|
||||
return(NULL);
|
||||
if (elem->type == XML_DTD_NODE)
|
||||
if ((elem->type == XML_DOCUMENT_NODE) || (elem->type == XML_DTD_NODE))
|
||||
return(NULL);
|
||||
if (elem->type == XML_DOCUMENT_NODE)
|
||||
result = xmlXIncludeCopyNodeList(ctxt, elem->children, NULL);
|
||||
else if ((elem->type == XML_ELEMENT_NODE) &&
|
||||
if ((elem->type == XML_ELEMENT_NODE) &&
|
||||
(elem->ns != NULL) &&
|
||||
(xmlStrEqual(elem->name, XINCLUDE_NODE)) &&
|
||||
((xmlStrEqual(elem->ns->href, XINCLUDE_NS)) ||
|
||||
@ -1167,30 +1165,34 @@ xmlXIncludeCopyXPointer(xmlXIncludeCtxtPtr ctxt, xmlXPathObjectPtr obj) {
|
||||
if (set == NULL)
|
||||
return(NULL);
|
||||
for (i = 0;i < set->nodeNr;i++) {
|
||||
xmlNodePtr node;
|
||||
|
||||
if (set->nodeTab[i] == NULL)
|
||||
continue;
|
||||
switch (set->nodeTab[i]->type) {
|
||||
case XML_DOCUMENT_NODE:
|
||||
case XML_HTML_DOCUMENT_NODE:
|
||||
node = xmlDocGetRootElement(
|
||||
(xmlDocPtr) set->nodeTab[i]);
|
||||
if (node == NULL) {
|
||||
xmlXIncludeErr(ctxt, set->nodeTab[i],
|
||||
XML_ERR_INTERNAL_ERROR,
|
||||
"document without root\n", NULL);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case XML_TEXT_NODE:
|
||||
case XML_CDATA_SECTION_NODE:
|
||||
case XML_ELEMENT_NODE:
|
||||
case XML_ENTITY_REF_NODE:
|
||||
case XML_ENTITY_NODE:
|
||||
case XML_PI_NODE:
|
||||
case XML_COMMENT_NODE:
|
||||
case XML_DOCUMENT_NODE:
|
||||
case XML_HTML_DOCUMENT_NODE:
|
||||
node = set->nodeTab[i];
|
||||
break;
|
||||
case XML_XINCLUDE_START:
|
||||
case XML_XINCLUDE_END:
|
||||
case XML_ATTRIBUTE_NODE:
|
||||
case XML_NAMESPACE_DECL:
|
||||
case XML_DOCUMENT_TYPE_NODE:
|
||||
case XML_DOCUMENT_FRAG_NODE:
|
||||
case XML_NOTATION_NODE:
|
||||
case XML_DTD_NODE:
|
||||
case XML_ELEMENT_DECL:
|
||||
case XML_ATTRIBUTE_DECL:
|
||||
case XML_ENTITY_DECL:
|
||||
default:
|
||||
xmlXIncludeErr(ctxt, set->nodeTab[i],
|
||||
XML_XINCLUDE_XPTR_RESULT,
|
||||
"invalid node type in XPtr result\n",
|
||||
NULL);
|
||||
continue; /* for */
|
||||
}
|
||||
/*
|
||||
@ -1199,7 +1201,7 @@ xmlXIncludeCopyXPointer(xmlXIncludeCtxtPtr ctxt, xmlXPathObjectPtr obj) {
|
||||
* xmlXIncludeCopyNode is only required for the initial
|
||||
* document.
|
||||
*/
|
||||
copy = xmlXIncludeCopyNode(ctxt, set->nodeTab[i]);
|
||||
copy = xmlXIncludeCopyNode(ctxt, node);
|
||||
if (copy == NULL) {
|
||||
xmlFreeNodeList(list);
|
||||
return(NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user