[libvirt] [PATCH v4 07/13] Adapt to VIR_STRDUP and VIR_STRNDUP in src/rpc/*

John Ferlan jferlan at redhat.com
Thu May 23 12:24:53 UTC 2013


On 05/20/2013 01:55 PM, Michal Privoznik wrote:
> ---
>  src/rpc/gendispatch.pl       | 21 ++++--------
>  src/rpc/virnetclient.c       | 16 ++++-----
>  src/rpc/virnetmessage.c      | 27 +++++++++------
>  src/rpc/virnetsaslcontext.c  |  6 ++--
>  src/rpc/virnetserver.c       |  6 ++--
>  src/rpc/virnetserverclient.c | 10 ++----
>  src/rpc/virnetservermdns.c   |  6 ++--
>  src/rpc/virnetsocket.c       | 10 +++---
>  src/rpc/virnetsshsession.c   | 78 +++++++++++++++++++++-----------------------
>  src/rpc/virnettlscontext.c   | 26 +++++++--------
>  10 files changed, 92 insertions(+), 114 deletions(-)
> 
> diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
[...snip...]

> diff --git a/src/rpc/virnetmessage.c b/src/rpc/virnetmessage.c
> index b2c6e5b..8483cd5 100644
> --- a/src/rpc/virnetmessage.c
> +++ b/src/rpc/virnetmessage.c
> @@ -29,6 +29,7 @@
>  #include "virlog.h"
>  #include "virfile.h"
>  #include "virutil.h"
> +#include "virstring.h"
>  
>  #define VIR_FROM_THIS VIR_FROM_RPC
>  
> @@ -514,22 +515,28 @@ void virNetMessageSaveError(virNetMessageErrorPtr rerr)
>      if (verr) {
>          rerr->code = verr->code;
>          rerr->domain = verr->domain;
> -        if (verr->message && VIR_ALLOC(rerr->message) == 0)
> -            *rerr->message = strdup(verr->message);
> +        if (verr->message && VIR_ALLOC(rerr->message) == 0 &&
> +            VIR_STRDUP_QUIET(*rerr->message, verr->message) < 0)
> +            VIR_FREE(rerr->message);
>          rerr->level = verr->level;
> -        if (verr->str1 && VIR_ALLOC(rerr->str1) == 0)
> -            *rerr->str1 = strdup(verr->str1);
> -        if (verr->str2 && VIR_ALLOC(rerr->str2) == 0)
> -            *rerr->str2 = strdup(verr->str2);
> -        if (verr->str3 && VIR_ALLOC(rerr->str3) == 0)
> -            *rerr->str3 = strdup(verr->str3);
> +        if (verr->str1 && VIR_ALLOC(rerr->str1) == 0 &&
> +            VIR_STRDUP_QUIET(*rerr->str1, verr->str1) < 0)
> +            VIR_FREE(verr->str1);
> +        if (verr->str2 && VIR_ALLOC(rerr->str2) == 0 &&
> +            VIR_STRDUP_QUIET(*rerr->str2, verr->str2) < 0)
> +            VIR_FREE(verr->str2);
> +        if (verr->str3 && VIR_ALLOC(rerr->str3) == 0 &&
> +            VIR_STRDUP_QUIET(*rerr->str3, verr->str3) < 0)
> +            VIR_FREE(verr->str2);

Coverity has a complaint in here:
525  	        if (verr->str2 && VIR_ALLOC(rerr->str2) == 0 &&
526  	            VIR_STRDUP_QUIET(*rerr->str2, verr->str2) < 0)

(1) Event original: 	"verr->str2" looks like the original copy.
Also see events: 	[copy_paste_error]

527  	            VIR_FREE(verr->str2);
528  	        if (verr->str3 && VIR_ALLOC(rerr->str3) == 0 &&
529  	            VIR_STRDUP_QUIET(*rerr->str3, verr->str3) < 0)

(2) Event copy_paste_error: 	"str2" in "verr->str2" looks like a
copy-paste error. Should it say "str3" instead?
Also see events: 	[original]

530  	            VIR_FREE(verr->str2);
531  	        rerr->int1 = verr->int1;
532  	        rerr->int2 = verr->int2;



The complaint is only on the last VIR_FREE(verr->str2); as a cut-n-paste
of the one on line 527; however, it seems to me all those VIR_FREE()'s
should be on "rerr" and not "verr", right?

That is, there's a VIR_ALLOC(rerr->str#) for each section, then on
failure shouldn't it be VIR_FREE(rerr->str#)?

John


>          rerr->int1 = verr->int1;
>          rerr->int2 = verr->int2;
>      } else {
>          rerr->code = VIR_ERR_INTERNAL_ERROR;
>          rerr->domain = VIR_FROM_RPC;
> -        if (VIR_ALLOC(rerr->message) == 0)
> -            *rerr->message = strdup(_("Library function returned error but did not set virError"));
> +        if (VIR_ALLOC(rerr->message) == 0 &&
> +            VIR_STRDUP_QUIET(*rerr->message,
> +                             _("Library function returned error but did not set virError")) < 0)
> +            VIR_FREE(rerr->message);
>          rerr->level = VIR_ERR_ERROR;
>      }
>  }
[...snip...]




More information about the libvir-list mailing list