]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Don't ignore errors parsing nwfilter rules
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 25 Sep 2013 14:26:58 +0000 (15:26 +0100)
committerLaine Stump <laine@laine.org>
Thu, 6 Feb 2014 13:05:31 +0000 (15:05 +0200)
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 <berrange@redhat.com>
(cherry picked from commit 4f2094346d98f4ed6a2de115d204c166cc563496)

Conflicts:
tests/nwfilterxml2xmltest.c
          - args to virNWFilterDefParseString are different, causing
            small conflict in context.

src/conf/nwfilter_conf.c
tests/nwfilterxml2xmltest.c

index 4e5bf69da0aa099fff2182981c7bdef4b958810b..0eaf00054fd53373011123c6a0fff90d97b3d55b 100644 (file)
@@ -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) {
index 44088b2b1c8de0842a6893ffdba0ec3a4eb3d480..2535add5408c97f804ea44041562df7865e751ca 100644 (file)
@@ -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: