summaryrefslogtreecommitdiff
path: root/libsoup
diff options
context:
space:
mode:
authorClaudio Saavedra <csaavedra@igalia.com>2019-08-30 15:17:17 +0300
committerClaudio Saavedra <csaavedra@igalia.com>2019-08-30 15:17:17 +0300
commit1a029e30ba0aa99f9e4813fafd86875d77a36cb1 (patch)
tree41136ed57670f871135d5a53bf3c4c0e1ffedb46 /libsoup
parent2a02994bdd6c0e9c692426af2fc0450e57d4e55b (diff)
downloadlibsoup-1a029e30ba0aa99f9e4813fafd86875d77a36cb1.tar.gz
WebSockets: plug a couple of leaks in case of error with the deflate extension
Also remove a spurious unref in the caller while handling the error, which shouldn't be needed as the extension returns NULL in case of error.
Diffstat (limited to 'libsoup')
-rw-r--r--libsoup/soup-websocket-connection.c2
-rw-r--r--libsoup/soup-websocket-extension-deflate.c9
2 files changed, 5 insertions, 6 deletions
diff --git a/libsoup/soup-websocket-connection.c b/libsoup/soup-websocket-connection.c
index cec4de37..b5f1455f 100644
--- a/libsoup/soup-websocket-connection.c
+++ b/libsoup/soup-websocket-connection.c
@@ -1077,8 +1077,6 @@ process_frame (SoupWebsocketConnection *self)
filtered_bytes = soup_websocket_extension_process_incoming_message (extension, self->pv->incoming->data, filtered_bytes, &error);
if (error) {
emit_error_and_close (self, error, FALSE);
- g_bytes_unref (filtered_bytes);
-
return FALSE;
}
}
diff --git a/libsoup/soup-websocket-extension-deflate.c b/libsoup/soup-websocket-extension-deflate.c
index 01faf3fc..dda27c73 100644
--- a/libsoup/soup-websocket-extension-deflate.c
+++ b/libsoup/soup-websocket-extension-deflate.c
@@ -355,6 +355,8 @@ soup_websocket_extension_deflate_process_outgoing_message (SoupWebsocketExtensio
bytes_written += write_remaining - priv->deflater.zstream.avail_out;
} while (result == Z_OK);
+ g_bytes_unref (payload);
+
if (result != Z_BUF_ERROR || bytes_written < 4) {
g_set_error_literal (error,
SOUP_WEBSOCKET_ERROR,
@@ -368,8 +370,6 @@ soup_websocket_extension_deflate_process_outgoing_message (SoupWebsocketExtensio
/* Remove 4 octets (that are 0x00 0x00 0xff 0xff) from the tail end. */
g_byte_array_set_size (buffer, bytes_written - 4);
- g_bytes_unref (payload);
-
deflater_reset (&priv->deflater);
return g_byte_array_free_to_bytes (buffer);
@@ -410,6 +410,7 @@ soup_websocket_extension_deflate_process_incoming_message (SoupWebsocketExtensio
SOUP_WEBSOCKET_ERROR,
SOUP_WEBSOCKET_CLOSE_PROTOCOL_ERROR,
"Received a non-first frame with RSV1 flag set");
+ g_bytes_unref (payload);
return NULL;
}
@@ -467,6 +468,8 @@ soup_websocket_extension_deflate_process_incoming_message (SoupWebsocketExtensio
break;
} while (result == Z_OK || result == Z_BUF_ERROR);
+ g_bytes_unref (payload);
+
if (result != Z_OK && result != Z_BUF_ERROR) {
priv->inflater.uncompress_ongoing = FALSE;
g_set_error_literal (error,
@@ -480,8 +483,6 @@ soup_websocket_extension_deflate_process_incoming_message (SoupWebsocketExtensio
g_byte_array_set_size (buffer, bytes_written);
- g_bytes_unref (payload);
-
return g_byte_array_free_to_bytes (buffer);
}