- tree.c xinclude.c xpointer.c: bug #56402 exposed a number of
weakness in the node copy the XPointer and the XInclude
implementations. Serious cleanup.
Daniel
diff --git a/tree.c b/tree.c
index 1eea985..ae97e7c 100644
--- a/tree.c
+++ b/tree.c
@@ -2700,6 +2700,38 @@
xmlNodePtr ret;
if (node == NULL) return(NULL);
+ switch (node->type) {
+ 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:
+#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
+#endif
+ case XML_XINCLUDE_START:
+ case XML_XINCLUDE_END:
+ break;
+ case XML_ATTRIBUTE_NODE:
+ return((xmlNodePtr)
+ xmlCopyProp(parent, (xmlAttrPtr) node));
+ case XML_NAMESPACE_DECL:
+ return((xmlNodePtr)
+ xmlCopyNamespaceList((xmlNsPtr) node));
+
+ 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:
+ return(NULL);
+ }
/*
* Allocate a new node and fill the fields.