summaryrefslogtreecommitdiff
path: root/lib/snprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/snprintf.c')
-rw-r--r--lib/snprintf.c8
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);