[libvirt] [PATCH 12/33] Fix error reporting in port profile parsing/formatting APIs

Daniel P. Berrange berrange at redhat.com
Mon Nov 14 19:47:36 UTC 2011


On Wed, Nov 09, 2011 at 02:58:32AM -0500, Laine Stump wrote:
> After applying this patch, make fails with:
> 
>   CC     libvirt_util_la-network.lo
> cc1: warnings being treated as errors
> util/network.c: In function 'virNetDevVPortProfileParse':
> util/network.c:712:23: error: assignment makes pointer from integer
> without a cast
> util/network.c:712:69: error: ordered comparison of pointer with
> integer zero [-Wextra]
> 
> 
> On 11/03/2011 01:30 PM, Daniel P. Berrange wrote:
> >From: "Daniel P. Berrange"<berrange at redhat.com>
> >
> >The virtual port profile parsing/formatting APIs do not
> >correctly handle unknown profile type strings/numbers.
> >They behave as a no-op, instead of raising an error
> 
> Actually I've noticed a *lot* of the *Format functions ignore the
> possibility of bad values in the vir*Def objects (e.g. invalid enum
> values), and have debated with myself about whether to ignore or
> report invalid data.

If we work from the assumption that the vir*Def objects can only be
populated as a result of parsing an XML document, then we can assume
the enum values in the vir*Def are all valid & within range.

If we allow for the possibility that code can populate the vir*Def
objects programmatically, then if it exclusively uses the enum
constants we will again be safe.

Only if we somehow populate vir*Def objects directly using int
values, instead of constants or the formal string<->int conversion
APIs, do we need to consider invalid values.

This particular code *was* assuming the worst and explicitly trying
to handle bogus values, but doing so in a really lame manner. 

IMHO it is not neccessary to handle invalid enum values in the
formatting code, but if you do decide to handle them, then you
*must* report the errors correctly and not just pretend they
don't exist after you detected them. The latter is what this
patch is fixing.


> >@@ -700,13 +699,19 @@ virNetDevVPortProfileParse(xmlNodePtr node,
> >
> >      if (VIR_ALLOC(virtPort)<  0) {
> >          virReportOOMError();
> >-        return -1;
> >+        return NULL;
> >      }
> >
> >      virtPortType = virXMLPropString(node, "type");
> >      if (!virtPortType) {
> >          virSocketError(VIR_ERR_XML_ERROR, "%s",
> >-                             _("missing virtualportprofile type"));
> >+                       _("missing virtualportprofile type"));
> >+        goto error;
> >+    }
> 
> The following should be "virtPort->virPortType = ....":

Opps, yes. Fixed in a later patch, will pull the fix back here.

> Anyway, ACK with the compile problem fixed.


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list