Em Tue, Oct 02, 2018 at 10:29:10AM -0400, Sanskriti Sharma escreveu:
> Ensure that all code paths in strbuf_addv() call va_end() on the
> ap_saved copy that was made.
> 
> Fixes the following coverity complaint:
> 
>   Error: VARARGS (CWE-237): [#def683]
>   tools/perf/util/strbuf.c:106: missing_va_end: va_end was not called
>   for "ap_saved".
 

Thanks, applied to perf/core

- Arnaldo

> Signed-off-by: Sanskriti Sharma <sansh...@redhat.com>
> ---
>  tools/perf/util/strbuf.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/util/strbuf.c b/tools/perf/util/strbuf.c
> index 3d1cf5b..9005fbe 100644
> --- a/tools/perf/util/strbuf.c
> +++ b/tools/perf/util/strbuf.c
> @@ -98,19 +98,25 @@ static int strbuf_addv(struct strbuf *sb, const char 
> *fmt, va_list ap)
>  
>       va_copy(ap_saved, ap);
>       len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap);
> -     if (len < 0)
> +     if (len < 0) {
> +             va_end(ap_saved);
>               return len;
> +     }
>       if (len > strbuf_avail(sb)) {
>               ret = strbuf_grow(sb, len);
> -             if (ret)
> +             if (ret) {
> +                     va_end(ap_saved);
>                       return ret;
> +             }
>               len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, 
> ap_saved);
>               va_end(ap_saved);
>               if (len > strbuf_avail(sb)) {
>                       pr_debug("this should not happen, your vsnprintf is 
> broken");
> +                     va_end(ap_saved);
>                       return -EINVAL;
>               }
>       }
> +     va_end(ap_saved);
>       return strbuf_setlen(sb, sb->len + len);
>  }
>  
> -- 
> 1.8.3.1

Reply via email to