From 84ab2045844cb0c22a839b5a7605217c5398ab2e Mon Sep 17 00:00:00 2001 From: Nathan Straz Date: Tue, 23 Jun 2009 14:26:32 -0400 Subject: Fix a segfault if no nodes were found The check for nodeset or null nodeset would short circuit causing us to deference the null nodeset. Return early instead so we can process the rest of the files. Include the filename in the output. --- gxpd.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'gxpd.c') diff --git a/gxpd.c b/gxpd.c index 70cd2bf..d6a2601 100644 --- a/gxpd.c +++ b/gxpd.c @@ -100,15 +100,15 @@ gxpd(char *fn, const char *xpath_query, const char *prefix) xpath_query, fn); exit(1); } - if (obj->type != XPATH_NODESET || obj->nodesetval == NULL) { - fprintf(stderr, "XPath expression '%s' did not match a nodeset.\n", xpath_query); - exit(1); + /* return early if there were no nodes to remove */ + if (obj->type != XPATH_NODESET) return 1; + if (obj->nodesetval == NULL) return 1; + + for (i = 0; i < obj->nodesetval->nodeNr; i++) { + xmlUnlinkNode(obj->nodesetval->nodeTab[i]); + xmlFreeNode(obj->nodesetval->nodeTab[i]); } - for (i = 0; i < obj->nodesetval->nodeNr; i++) { - xmlUnlinkNode(obj->nodesetval->nodeTab[i]); - xmlFreeNode(obj->nodesetval->nodeTab[i]); - } - printf("Removed %d nodes\n", i); + printf("%d nodes removed from %s\n", i, fn); xmlXPathFreeObject(obj); xmlSaveFile(fn, doc); -- cgit