Memory issues on the new type:
- xpath.c: when copying a XSLT tree object the tree need to be copied
  too, and deallocation need to occur the same way.
Daniel
diff --git a/ChangeLog b/ChangeLog
index 54f27f5..76205c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Jan 22 11:43:21 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+	* xpath.c: when copying a XSLT tree object teh tree need to be copied
+	  too, and deallocation need to occur the same way.
+
 Mon Jan 22 10:35:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
 
 	* xpathInternals.h xpath.[ch] debugXML.c: added the XPATH_XSLT_TREE
diff --git a/xpath.c b/xpath.c
index a35683a..409c12d 100644
--- a/xpath.c
+++ b/xpath.c
@@ -726,6 +726,34 @@
     xmlFree(obj);
 }
 
+/**
+ * xmlXPathFreeValueTree:
+ * @obj:  the xmlNodeSetPtr to free
+ *
+ * Free the NodeSet compound and the actual tree, this is different
+ * from xmlXPathFreeNodeSet()
+ */
+void
+xmlXPathFreeValueTree(xmlNodeSetPtr obj) {
+    int i;
+
+    if (obj == NULL) return;
+    for (i = 0;i < obj->nodeNr;i++)
+        if (obj->nodeTab[i] != NULL)
+	    xmlFreeNode(obj->nodeTab[i]);
+
+    if (obj->nodeTab != NULL) {
+#ifdef DEBUG
+	memset(obj->nodeTab, 0xB , (size_t) sizeof(xmlNodePtr) * obj->nodeMax);
+#endif
+	xmlFree(obj->nodeTab);
+    }
+#ifdef DEBUG
+    memset(obj, 0xB , (size_t) sizeof(xmlNodeSet));
+#endif
+    xmlFree(obj);
+}
+
 #if defined(DEBUG) || defined(DEBUG_STEP)
 /**
  * xmlGenericErrorContextNodeSet:
@@ -1332,6 +1360,13 @@
 	case XPATH_STRING:
 	    ret->stringval = xmlStrdup(val->stringval);
 	case XPATH_XSLT_TREE:
+	    if ((val->nodesetval != NULL) &&
+		(val->nodesetval->nodeTab != NULL))
+		ret->nodesetval = xmlXPathNodeSetCreate(
+			xmlCopyNode(val->nodesetval->nodeTab[0], 1));
+	    else
+		ret->nodesetval = xmlXPathNodeSetCreate(NULL);
+	    break;
 	case XPATH_NODESET:
 	    ret->nodesetval = xmlXPathNodeSetMerge(NULL, val->nodesetval);
 	    break;
@@ -1375,7 +1410,7 @@
 	    xmlFree(obj->stringval);
     } else if (obj->type == XPATH_XSLT_TREE) {
 	if (obj->nodesetval != NULL)
-	    xmlXPathFreeNodeSet(obj->nodesetval);
+	    xmlXPathFreeValueTree(obj->nodesetval);
     }
 
 #ifdef DEBUG