Minimal changes for XSLT node-set() extra function:
- tree.c: minor doc fix
- xpath.c: deallocation issues when a result tree has been
converted to a node-set
Daniel
diff --git a/xpath.c b/xpath.c
index ff7a89b..1bc30e6 100644
--- a/xpath.c
+++ b/xpath.c
@@ -999,6 +999,7 @@
}
memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
ret->type = XPATH_NODESET;
+ ret->boolval = 0;
ret->nodesetval = xmlXPathNodeSetCreate(val);
return(ret);
}
@@ -1586,8 +1587,14 @@
xmlXPathFreeObject(xmlXPathObjectPtr obj) {
if (obj == NULL) return;
if (obj->type == XPATH_NODESET) {
- if (obj->nodesetval != NULL)
- xmlXPathFreeNodeSet(obj->nodesetval);
+ if (obj->boolval) {
+ obj->type = XPATH_XSLT_TREE;
+ if (obj->nodesetval != NULL)
+ xmlXPathFreeValueTree(obj->nodesetval);
+ } else {
+ if (obj->nodesetval != NULL)
+ xmlXPathFreeNodeSet(obj->nodesetval);
+ }
#ifdef LIBXML_XPTR_ENABLED
} else if (obj->type == XPATH_LOCATIONSET) {
if (obj->user != NULL)