From 11a31c0880e758cf55d541b197e97397f4dc27e3 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 25 Sep 2013 15:26:58 +0100 Subject: [PATCH] Don't ignore errors parsing nwfilter rules For inexplicable reasons, the nwfilter XML parser is intentionally ignoring errors that arise during parsing. As well as meaning that users don't get any feedback on their XML mistakes, this will lead it to silently drop data in OOM conditions. Signed-off-by: Daniel P. Berrange (cherry picked from commit 4f2094346d98f4ed6a2de115d204c166cc563496) Conflicts: tests/nwfilterxml2xmltest.c - args to virNWFilterDefParseString are different, causing small conflict in context. --- src/conf/nwfilter_conf.c | 16 ++++++++-------- tests/nwfilterxml2xmltest.c | 14 ++++++-------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c index 4e5bf69da0..0eaf00054f 100644 --- a/src/conf/nwfilter_conf.c +++ b/src/conf/nwfilter_conf.c @@ -2379,9 +2379,7 @@ virNWFilterRuleParse(xmlNodePtr node) if (virNWFilterRuleDetailsParse(cur, ret, virAttr[i].att) < 0) { - /* we ignore malformed rules - goto err_exit; - */ + goto err_exit; } break; } @@ -2589,11 +2587,13 @@ virNWFilterDefParseXML(xmlXPathContextPtr ctxt) { goto cleanup; } - /* ignore malformed rule and include elements */ - if (xmlStrEqual(curr->name, BAD_CAST "rule")) - entry->rule = virNWFilterRuleParse(curr); - else if (xmlStrEqual(curr->name, BAD_CAST "filterref")) - entry->include = virNWFilterIncludeParse(curr); + if (xmlStrEqual(curr->name, BAD_CAST "rule")) { + if (!(entry->rule = virNWFilterRuleParse(curr))) + goto cleanup; + } else if (xmlStrEqual(curr->name, BAD_CAST "filterref")) { + if (!(entry->include = virNWFilterIncludeParse(curr))) + goto cleanup; + } if (entry->rule || entry->include) { if (VIR_REALLOC_N(ret->filterEntries, ret->nentries+1) < 0) { diff --git a/tests/nwfilterxml2xmltest.c b/tests/nwfilterxml2xmltest.c index 44088b2b1c..2535add540 100644 --- a/tests/nwfilterxml2xmltest.c +++ b/tests/nwfilterxml2xmltest.c @@ -33,15 +33,12 @@ testCompareXMLToXMLFiles(const char *inxml, const char *outxml, virResetLastError(); - if (!(dev = virNWFilterDefParseString(inXmlData))) + if (!(dev = virNWFilterDefParseString(inXmlData))) { + if (expect_error) { + virResetLastError(); + goto done; + } goto fail; - - if (!!virGetLastError() != expect_error) - goto fail; - - if (expect_error) { - /* need to suppress the errors */ - virResetLastError(); } if (!(actual = virNWFilterDefFormat(dev))) @@ -52,6 +49,7 @@ testCompareXMLToXMLFiles(const char *inxml, const char *outxml, goto fail; } + done: ret = 0; fail: -- 2.47.2