summaryrefslogtreecommitdiff
path: root/libsoup/soup-converter-wrapper.c
diff options
context:
space:
mode:
Diffstat (limited to 'libsoup/soup-converter-wrapper.c')
-rw-r--r--libsoup/soup-converter-wrapper.c28
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;