Fix a memory leak which occurred when using
* xpath.c: Fix a memory leak which occurred when using
xmlXPathCompiledEvalToBoolean().
diff --git a/ChangeLog b/ChangeLog
index 0bb08fe..24f2041 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Jun 28 19:11:16 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>
+
+ * xpath.c: Fix a memory leak which occurred when using
+ xmlXPathCompiledEvalToBoolean().
+
Mon Jun 26 17:24:28 UTC 2006 William Brack <wbrack@mmm.com.hk>
* python/libxml.c, python/libxml.py, python/tests/compareNodes.py,
diff --git a/xpath.c b/xpath.c
index 80c1685..f947404 100644
--- a/xpath.c
+++ b/xpath.c
@@ -13997,7 +13997,7 @@
int ret, depth;
int eval_all_nodes;
xmlNodePtr cur = NULL, limit = NULL;
- xmlStreamCtxtPtr patstream;
+ xmlStreamCtxtPtr patstream = NULL;
int nb_nodes = 0;
@@ -14027,15 +14027,17 @@
}
/*
- * handle the special cases of / amd . being matched
+ * handle the special cases of "/" amd "." being matched
*/
if (min_depth == 0) {
if (from_root) {
+ /* Select "/" */
if (toBool)
return(1);
xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval,
(xmlNodePtr) ctxt->doc);
} else {
+ /* Select "self::node()" */
if (toBool)
return(1);
xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval, ctxt->node);
@@ -14097,7 +14099,7 @@
if (ret < 0) {
} else if (ret == 1) {
if (toBool)
- return(1);
+ goto return_1;
xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval, cur);
}
}
@@ -14125,7 +14127,7 @@
/* NOP. */
} else if (ret == 1) {
if (toBool)
- return(1);
+ goto return_1;
xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval, cur);
}
if ((cur->children == NULL) || (depth >= max_depth)) {
@@ -14197,8 +14199,14 @@
nb_nodes, retObj->nodesetval->nodeNr);
#endif
- xmlFreeStreamCtxt(patstream);
+ if (patstream)
+ xmlFreeStreamCtxt(patstream);
return(0);
+
+return_1:
+ if (patstream)
+ xmlFreeStreamCtxt(patstream);
+ return(1);
}
#endif /* XPATH_STREAMING */