[libvirt] [PATCH] Fix build with GCC's static analysis

Peter Krempa pkrempa at redhat.com
Mon Mar 27 11:21:07 UTC 2017


On Mon, Mar 27, 2017 at 12:46:40 +0200, Martin Kletzander wrote:
> STREQ_NULLABLE returns true if both parameters are NULL.  And that's
> not what we want here.  We just want to skop comparing source nodes

s/skop/skip/

> that don't have that info set.  The function wouldn't make much sense
> with nodeName == NULL, so we don't need to check that.  Moreover, the
> function's declaration uses ATTRIBUDE_NONNULL for nodeName, which not

s/ATTRIBUDE_NONNULL/ATTRIBUTE_NONNULL/

> only means that function expects the parameter not to be NULL, but
> actually tells the compiler that it can optimize out the NULL checks.
> That way it could end up calling strcmp on NULL (either nodeformat or
> nodebacking).  GCC figures this out if libvirt is compiled with
> lv_cv_static_analysis=yes, unfortunately not everyone uses that.
> 
> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> ---
>  src/util/virstoragefile.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
> index 3bcb69bf6206..0ac707962102 100644
> --- a/src/util/virstoragefile.c
> +++ b/src/util/virstoragefile.c
> @@ -3809,8 +3809,8 @@ virStorageSourceFindByNodeName(virStorageSourcePtr top,
>          *index = 0;
> 
>      for (tmp = top; tmp; tmp = tmp->backingStore) {
> -        if (STREQ_NULLABLE(tmp->nodeformat, nodeName) ||
> -            STREQ_NULLABLE(tmp->nodebacking, nodeName))
> +        if ((tmp->nodeformat && STREQ(tmp->nodeformat, nodeName)) ||
> +            (tmp->nodebacking && STREQ(tmp->nodebacking, nodeName)))
>              return tmp;
> 

ACK
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170327/ad5f18a7/attachment-0001.sig>


More information about the libvir-list mailing list