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