[libvirt] [PATCH] consolidate virXPathNodeSet()
Daniel Veillard
veillard at redhat.com
Wed Oct 21 15:24:03 UTC 2009
While reviewing Rich last patch I was afraid that virXPathNodeSet()
could return -1 when doing an evaluation failure. It is based on
xmlXPathEval() from libxml2 whose behaviour is to possibly return NULL
on XPath evaluation failure independantly of the kind of failure:
http://xmlsoft.org/html/libxml-xpath.html#xmlXPathEval
I suggest to apply this patch to make sure we always return 0
unless the returned XPath type is of the wrong type (meaning the
query passed didn't evaluate to a node set and code must be fixed)
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
-------------- next part --------------
diff --git a/src/util/xml.c b/src/util/xml.c
index 4118d2a..4fa443d 100644
--- a/src/util/xml.c
+++ b/src/util/xml.c
@@ -490,11 +490,16 @@ virXPathNodeSet(virConnectPtr conn,
relnode = ctxt->node;
obj = xmlXPathEval(BAD_CAST xpath, ctxt);
ctxt->node = relnode;
- if ((obj == NULL) || (obj->type != XPATH_NODESET) ||
- (obj->nodesetval == NULL) || (obj->nodesetval->nodeNr < 0)) {
+ if (obj == NULL)
+ return(0);
+ if (obj->type != XPATH_NODESET) {
xmlXPathFreeObject(obj);
return (-1);
}
+ if ((obj->nodesetval == NULL) || (obj->nodesetval->nodeNr < 0)) {
+ xmlXPathFreeObject(obj);
+ return (0);
+ }
ret = obj->nodesetval->nodeNr;
if (list != NULL && ret) {
More information about the libvir-list
mailing list