diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-10-25 07:01:59 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-10-25 07:01:59 -0400 |
| commit | adc62ec8b7ce705a5e628f291cfc5a0df9bc42b8 (patch) | |
| tree | b045f83cea9a3036b05a27a2fc491d31e291bdf3 /lib/printf/glue.c | |
| parent | 49085521faafee39e942043a1b1ea5ab31f06b48 (diff) | |
lib: va_copy must have a va_end to free memory
All va_copy() calls must have a va_end() call.
Caught by Coverity
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'lib/printf/glue.c')
| -rw-r--r-- | lib/printf/glue.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/printf/glue.c b/lib/printf/glue.c index 1b760dc2d3..29ca26ad5d 100644 --- a/lib/printf/glue.c +++ b/lib/printf/glue.c @@ -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; } |
