GConverterInputStream: fix an infinite loop when fill_buffer returns an error
authorDan Winship <danw@gnome.org>
Tue, 17 Apr 2012 15:46:50 +0000 (11:46 -0400)
committerDan Winship <danw@gnome.org>
Tue, 17 Apr 2012 16:33:12 +0000 (12:33 -0400)
The loop was using a GConverterResult variable where it meant to use a
gssize, and since GConverterResult was ending up as an unsigned type,
this meant the (res < 0) check always failed.

gio/gconverterinputstream.c

index d81cd90..2fbf94d 100644 (file)
@@ -495,18 +495,18 @@ g_converter_input_stream_read (GInputStream *stream,
        {
          /* Need more data */
          my_error2 = NULL;
-         res = fill_input_buffer (cstream,
-                                  buffer_data_size (&priv->input_buffer) + 4096,
-                                  cancellable,
-                                  &my_error2);
-         if (res < 0)
+         nread = fill_input_buffer (cstream,
+                                    buffer_data_size (&priv->input_buffer) + 4096,
+                                    cancellable,
+                                    &my_error2);
+         if (nread < 0)
            {
              /* Can't read any more data, return that error */
              g_error_free (my_error);
              g_propagate_error (error, my_error2);
              return -1;
            }
-         else if (res == 0)
+         else if (nread == 0)
            {
              /* End of file, try INPUT_AT_END */
              priv->at_input_end = TRUE;