diff options
Diffstat (limited to 'libsoup/soup-converter-wrapper.c')
-rw-r--r-- | libsoup/soup-converter-wrapper.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/libsoup/soup-converter-wrapper.c b/libsoup/soup-converter-wrapper.c index 8aa000b9..6fa19d91 100644 --- a/libsoup/soup-converter-wrapper.c +++ b/libsoup/soup-converter-wrapper.c @@ -15,12 +15,14 @@ #include "soup.h" /* SoupConverterWrapper is a GConverter that wraps another GConverter. - * Mostly it is transparent, but it implements three special fallbacks + * Mostly it is transparent, but it implements four special fallbacks * for Content-Encoding handling: (1) "deflate" can mean either raw - * deflate or zlib-encoded default, (2) the server may mistakenly + * deflate or zlib-encoded deflate, (2) the server may mistakenly * claim that a response is encoded when actually it isn't, (3) the * response may contain trailing junk after the end of the encoded - * portion that we want to ignore. + * portion that we want to ignore, (4) the response may be truncated + * at an arbitrary point rather than containing a complete compressed + * representation. * * If the wrapped conversion succeeds, then the wrapper will set the * %SOUP_MESSAGE_CONTENT_DECODED flag on its message. @@ -48,11 +50,20 @@ struct _SoupConverterWrapperPrivate }; static void +soup_converter_wrapper_init (SoupConverterWrapper *converter) +{ + converter->priv = G_TYPE_INSTANCE_GET_PRIVATE (converter, + SOUP_TYPE_CONVERTER_WRAPPER, + SoupConverterWrapperPrivate); +} + +static void soup_converter_wrapper_finalize (GObject *object) { SoupConverterWrapperPrivate *priv = SOUP_CONVERTER_WRAPPER (object)->priv; g_clear_object (&priv->base_converter); + g_clear_object (&priv->msg); G_OBJECT_CLASS (soup_converter_wrapper_parent_class)->finalize (object); } @@ -114,14 +125,6 @@ soup_converter_wrapper_get_property (GObject *object, } static void -soup_converter_wrapper_init (SoupConverterWrapper *converter) -{ - converter->priv = G_TYPE_INSTANCE_GET_PRIVATE (converter, - SOUP_TYPE_CONVERTER_WRAPPER, - SoupConverterWrapperPrivate); -} - -static void soup_converter_wrapper_class_init (SoupConverterWrapperClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); @@ -271,8 +274,7 @@ soup_converter_wrapper_real_convert (GConverter *converter, } if (g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_PARTIAL_INPUT) && - !priv->started && inbuf_size == 0 && - (flags & G_CONVERTER_INPUT_AT_END)) { + inbuf_size == 0 && (flags & G_CONVERTER_INPUT_AT_END)) { /* Server claimed compression but there was no message body. */ g_error_free (my_error); *bytes_written = 0; |