summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xpath.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/xpath.c b/xpath.c
index b358cc06..d3828335 100644
--- a/xpath.c
+++ b/xpath.c
@@ -4560,16 +4560,23 @@ xmlXPathDistinctSorted (xmlNodeSetPtr nodes) {
cur = xmlXPathNodeSetItem(nodes, i);
strval = xmlXPathCastNodeToString(cur);
if (xmlHashLookup(hash, strval) == NULL) {
- xmlHashAddEntry(hash, strval, strval);
- /* TODO: Propagate memory error. */
+ if (xmlHashAddEntry(hash, strval, strval) < 0) {
+ xmlFree(strval);
+ goto error;
+ }
if (xmlXPathNodeSetAddUnique(ret, cur) < 0)
- break;
+ goto error;
} else {
xmlFree(strval);
}
}
xmlHashFree(hash, xmlHashDefaultDeallocator);
return(ret);
+
+error:
+ xmlHashFree(hash, xmlHashDefaultDeallocator);
+ xmlXPathFreeNodeSet(ret);
+ return(NULL);
}
/**