Ensure we always have some target space in GConverterOutputStream
authorJürg Billeter <j@bitron.ch>
Thu, 27 May 2010 14:55:53 +0000 (16:55 +0200)
committerAlexander Larsson <alexl@redhat.com>
Fri, 11 Jun 2010 07:55:23 +0000 (09:55 +0200)
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

gio/gconverteroutputstream.c

index d1e1b6f..7ad8d5e 100644 (file)
@@ -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,