summaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorMateusz Łukasik <mati75@linuxmint.pl>2016-04-21 12:17:42 +0200
committerMateusz Łukasik <mati75@linuxmint.pl>2016-04-21 12:17:42 +0200
commit36e11d485bf132c7ae9cf5c3433ae40d63adb54d (patch)
tree8a0fb7f42ce74ee05c2da8228d6d633fabc8dab5 /misc
parentfe66d42debb01fbb0e0c85679d1aaed2ccbc531b (diff)
Imported Upstream version 0.17.0
Diffstat (limited to 'misc')
-rw-r--r--misc/bstr.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/misc/bstr.c b/misc/bstr.c
index 13441ee..1a2676c 100644
--- a/misc/bstr.c
+++ b/misc/bstr.c
@@ -401,15 +401,21 @@ void bstr_xappend_vasprintf(void *talloc_ctx, bstr *s, const char *fmt,
int size;
va_list copy;
va_copy(copy, ap);
+ size_t avail = talloc_get_size(s->start) - s->len;
+ char *dest = s->start ? s->start + s->len : NULL;
char c;
- size = vsnprintf(&c, 1, fmt, copy);
+ if (avail < 1)
+ dest = &c;
+ size = vsnprintf(dest, MPMAX(avail, 1), fmt, copy);
va_end(copy);
if (size < 0)
abort();
- resize_append(talloc_ctx, s, size + 1);
- vsnprintf(s->start + s->len, size + 1, fmt, ap);
+ if (avail < 1 || size + 1 > avail) {
+ resize_append(talloc_ctx, s, size + 1);
+ vsnprintf(s->start + s->len, size + 1, fmt, ap);
+ }
s->len += size;
}