Fix bug in case of error returned by vsnprintf:

the buffer may have been corrupted in case of error.
Clean it before returning.
This commit is contained in:
Patrick Pelissier committed 2018-07-18 21:41:52 +02:00
1 parent be26176828
commit 18be930507
1 file changed
+5
+5
View File
@@ -629,9 +629,14 @@ string_cat_printf (string_t v, const char format[], ...)
va_end (args); va_end (args);
va_start (args, format); va_start (args, format);
size = vsnprintf (&v->ptr[v->size], v->alloc - v->size, format, args); size = vsnprintf (&v->ptr[v->size], v->alloc - v->size, format, args);
assert (size >= 0);
} }
if (size >= 0) { if (size >= 0) {
v->size += (size_t) size; v->size += (size_t) size;
} else if (v->ptr != NULL) {
// vsnprintf may have output some characters before returning an error.
// Undo this to have a clean state
v->ptr[v->size] = 0;
} }
va_end (args); va_end (args);
STRINGI_CONTRACT (v); STRINGI_CONTRACT (v);