- 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.