summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2023-03-31 14:51:20 +1100
committerDamien Miller <djm@mindrot.org>2023-04-03 10:01:01 +1000
commitb36b162be5e6206f12b734222b7bc517c13a6bc8 (patch)
treea9ca3d379605fe63a571652883134ae4730b87a4
parentf703757234a5c585553e72bba279b255a272750a (diff)
downloadopenssh-git-b36b162be5e6206f12b734222b7bc517c13a6bc8.tar.gz
need va_end() after va_copy(); ok dtucker
spotted by Coverity
-rw-r--r--openbsd-compat/bsd-snprintf.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/openbsd-compat/bsd-snprintf.c b/openbsd-compat/bsd-snprintf.c
index bc505b83..0d23a86c 100644
--- a/openbsd-compat/bsd-snprintf.c
+++ b/openbsd-compat/bsd-snprintf.c
@@ -320,7 +320,7 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
value = va_arg (args, int);
if (fmtint(buffer, &currlen, maxlen,
value, 10, min, max, flags) == -1)
- return -1;
+ goto fail;
break;
case 'o':
flags |= DP_F_UNSIGNED;
@@ -340,7 +340,7 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
value = (long)va_arg (args, unsigned int);
if (fmtint(buffer, &currlen, maxlen, value,
8, min, max, flags) == -1)
- return -1;
+ goto fail;
break;
case 'u':
flags |= DP_F_UNSIGNED;
@@ -360,7 +360,7 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
value = (long)va_arg (args, unsigned int);
if (fmtint(buffer, &currlen, maxlen, value,
10, min, max, flags) == -1)
- return -1;
+ goto fail;
break;
case 'X':
flags |= DP_F_UP;
@@ -382,7 +382,7 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
value = (long)va_arg (args, unsigned int);
if (fmtint(buffer, &currlen, maxlen, value,
16, min, max, flags) == -1)
- return -1;
+ goto fail;
break;
case 'f':
if (cflags == DP_C_LDOUBLE)
@@ -391,7 +391,7 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
fvalue = va_arg (args, double);
if (fmtfp(buffer, &currlen, maxlen, fvalue,
min, max, flags) == -1)
- return -1;
+ goto fail;
break;
case 'E':
flags |= DP_F_UP;
@@ -402,7 +402,7 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
fvalue = va_arg (args, double);
if (fmtfp(buffer, &currlen, maxlen, fvalue,
min, max, flags) == -1)
- return -1;
+ goto fail;
break;
case 'G':
flags |= DP_F_UP;
@@ -413,7 +413,7 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
fvalue = va_arg (args, double);
if (fmtfp(buffer, &currlen, maxlen, fvalue,
min, max, flags) == -1)
- return -1;
+ goto fail;
break;
case 'c':
DOPR_OUTCH(buffer, currlen, maxlen,
@@ -428,13 +428,13 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
if (min > 0 && max >= 0 && min > max) max = min;
if (fmtstr(buffer, &currlen, maxlen,
strvalue, flags, min, max) == -1)
- return -1;
+ goto fail;
break;
case 'p':
strvalue = va_arg (args, void *);
if (fmtint(buffer, &currlen, maxlen,
(long) strvalue, 16, min, max, flags) == -1)
- return -1;
+ goto fail;
break;
#if we_dont_want_this_in_openssh
case 'n':
@@ -494,8 +494,11 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
else if (maxlen > 0)
buffer[maxlen - 1] = '\0';
}
-
+ va_end(args);
return currlen < INT_MAX ? (int)currlen : -1;
+ fail:
+ va_end(args);
+ return -1;
}
static int