]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: va_copy must have a va_end to free memory
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 25 Oct 2019 11:01:59 +0000 (07:01 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 25 Oct 2019 11:01:59 +0000 (07:01 -0400)
All va_copy() calls must have a va_end() call.
Caught by Coverity

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
lib/printf/glue.c

index 1b760dc2d3dc02a019b5069ccd627ef6b46b8f4f..29ca26ad5da184d7e9653e4c7704c7ecca82e109 100644 (file)
@@ -101,9 +101,11 @@ char *vasnprintfrr(struct memtype *mt, char *out, size_t outsz, const char *fmt,
 
        va_copy(ap2, ap);
        len = vbprintfrr(&fb, fmt, ap);
-       if (len < 0)
+       if (len < 0) {
+               va_end(ap2);
                /* error = malformed format string => try something useful */
                return qstrdup(mt, fmt);
+       }
 
        if ((size_t)len >= outsz - 1) {
                ret = qmalloc(mt, len + 1);
@@ -112,6 +114,8 @@ char *vasnprintfrr(struct memtype *mt, char *out, size_t outsz, const char *fmt,
 
                vbprintfrr(&fb, fmt, ap2);
        }
+
+       va_end(ap2);
        ret[len] = '\0';
        return ret;
 }