From efff840412e1de09f4dcc4d06aa8577a09dc7669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrg=20Billeter?= Date: Thu, 27 May 2010 16:55:53 +0200 Subject: [PATCH] Ensure we always have some target space in GConverterOutputStream When the converter fills the whole buffer without reading all input, we need to enlarge the buffer. Otherwise we get an assertion failure for `outbuf_size > 0' in g_converter_convert. https://bugzilla.gnome.org/show_bug.cgi?id=619945 (cherry picked from commit 86592d675ff8f1bf0f647fe926ea6085e7b1f2bc) --- gio/gconverteroutputstream.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gio/gconverteroutputstream.c b/gio/gconverteroutputstream.c index d1e1b6f2e..7ad8d5e42 100644 --- a/gio/gconverteroutputstream.c +++ b/gio/gconverteroutputstream.c @@ -418,6 +418,10 @@ g_converter_output_stream_write (GOutputStream *stream, converted_bytes = 0; while (!priv->finished && converted_bytes < to_convert_size) { + /* Ensure we have *some* target space */ + if (buffer_tailspace (&priv->converted_buffer) == 0) + grow_buffer (&priv->converted_buffer); + /* Try to convert to our buffer */ my_error = NULL; res = g_converter_convert (priv->converter, @@ -529,6 +533,10 @@ g_converter_output_stream_flush (GOutputStream *stream, flushed = FALSE; while (!priv->finished && !flushed) { + /* Ensure we have *some* target space */ + if (buffer_tailspace (&priv->converted_buffer) == 0) + grow_buffer (&priv->converted_buffer); + /* Try to convert to our buffer */ my_error = NULL; res = g_converter_convert (priv->converter,