[libvirt] [PATCHv2] Ignore bridge template names with multiple printf conversions

Ján Tomko jtomko at redhat.com
Wed May 13 10:55:30 UTC 2015


On Wed, May 13, 2015 at 06:39:12AM -0400, John Ferlan wrote:
> 
> 
> On 05/05/2015 12:39 PM, Eric Blake wrote:
> > On 05/05/2015 10:26 AM, Ján Tomko wrote:
> >> On Tue, May 05, 2015 at 10:14:18AM -0600, Eric Blake wrote:
> >>> On 05/05/2015 10:05 AM, Ján Tomko wrote:
> >>>> For some reason, we allow a bridge name with %d in it, which we replace
> >>>> with an unsigned integer to form a bridge name that does not yet exist
> >>>> on the host.
> >>>>
> > 
> >>>> +    if (def->bridge &&
> >>>> +        (p = strchr(def->bridge, '%')) == strrchr(def->bridge, '%') &&
> >>>> +        strstr(def->bridge, "%d"))
> >>>
> >>> Simpler as:
> >>>
> >>> if (def->bridge &&
> >>>     strstr(def->bridge, "%d") == strrchr(def->bridge, '%'))
> >>
> >> I still don't see it.
> >>
> >> [A] strchr(def->bridge, '%')
> >> [B] strrchr(def->bridge, '%')
> >> [C] strstr(def->bridge, "%d"))
> >>
> >> When def->bridge is '%s%s%s%d', [A] points to the first %s, [B] points
> >> to the %d and so does [C]
> >>
> >> This string would pass the simplified condition (B == C), but not the
> >> full one (A != C)
> > 
> > Okay, I see your counterargument.  Still, strstr() is pretty expensive
> > compared to just:
> > 
> > if (def->bridge &&
> >     (p = strchr(def->bridge, '%')) == strrchr(def->bridge, '%') &&
> >     p[1] == 'd')
> > 
> 
> Coverity complains :
> 
> Event returned_null: 	"strchr" returns null (checked 273 out of 288 times).

strchr does not return NULL here because networkFindUnusedBridgeName is
only called if either def->bridge is NULL or def->bridge contains "%d".

Jan

> Event var_assigned: 	Assigning: "p" = null return value from "strchr".
> Event cond_true: 	Condition "(p = strchr(def->bridge, 37)) == strrchr(def->bridge, 37)", taking true branch
> Event dereference: 	Dereferencing a null pointer "p".
> 
> John
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150513/13f74093/attachment-0001.sig>


More information about the libvir-list mailing list