diff options
Diffstat (limited to 'lib/snprintf.c')
-rw-r--r-- | lib/snprintf.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/snprintf.c b/lib/snprintf.c index c281f7c58..ef00f55b4 100644 --- a/lib/snprintf.c +++ b/lib/snprintf.c @@ -45,11 +45,12 @@ snprintf (char *str, size_t size, const char *format, ...) { char *output; size_t len; + size_t lenbuf = size; va_list args; va_start (args, format); - len = size; output = vasnprintf (str, &len, format, args); + len = lenbuf; va_end (args); if (!output) @@ -59,8 +60,9 @@ snprintf (char *str, size_t size, const char *format, ...) { if (size) { - memcpy (str, output, size - 1); - str[size - 1] = '\0'; + size_t pruned_len = (len < size ? len : size - 1); + memcpy (str, output, pruned_len); + str[pruned_len] = '\0'; } free (output); |