Be more robust against printf failures If an 'output error' is encountered, vsnprintf() will return -1, causing g_printf_string_upper_bound() to return 0. Handle this case in g_vasprintf() without crashing. Fixes: #3187
diff --git a/glib/gprintf.c b/glib/gprintf.c index a0ccef9..172418d 100644 --- a/glib/gprintf.c +++ b/glib/gprintf.c
@@ -358,19 +358,23 @@ #else { - va_list args2; - - va_copy (args2, args); - *string = g_new (gchar, g_printf_string_upper_bound (format, args)); - len = _g_vsprintf (*string, format, args2); - va_end (args2); - - if (len < 0) + if (*string == NULL) + len = -1; + else { - g_free (*string); - *string = NULL; + va_list args2; + + va_copy (args2, args); + len = _g_vsprintf (*string, format, args2); + va_end (args2); + + if (len < 0) + { + g_free (*string); + *string = NULL; + } } } #endif