mirror of
https://github.com/weechat/weechat.git
synced 2026-07-03 16:23:14 +02:00
relay/api: only decompress compressed messages
With permessage-deflate, RSV1 of the first fragment indicates whether or not the message is compressed [1]. If RSV1 is not set then the message should not be decompressed. [1] https://datatracker.ietf.org/doc/html/rfc7692#section-6
This commit is contained in:
committed by
Sébastien Helleu
parent
cfa59405cf
commit
acaf528628
@@ -12,6 +12,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- core: fix buffer overflow in connection to SOCKS5 proxy ([#2325](https://github.com/weechat/weechat/issues/2325))
|
||||
- relay/api: fix memory leak in resources "handshake", "input" and "completion"
|
||||
- relay: fix read of uncompressed websocket frame ([#2331](https://github.com/weechat/weechat/issues/2331))
|
||||
- xfer: fix out-of-bounds write in xfer file transfer resume ([#2326](https://github.com/weechat/weechat/issues/2326))
|
||||
|
||||
## Version 4.9.2 (2026-06-07)
|
||||
|
||||
@@ -653,7 +653,7 @@ relay_websocket_decode_frame (const unsigned char *buffer,
|
||||
size_t size_decompressed;
|
||||
char *payload_decompressed;
|
||||
struct t_relay_websocket_frame *frames2, *ptr_frame;
|
||||
int size, masked_frame, mask[4];
|
||||
int size, compressed, masked_frame, mask[4];
|
||||
|
||||
if (!buffer || !frames || !num_frames)
|
||||
return 0;
|
||||
@@ -674,6 +674,9 @@ relay_websocket_decode_frame (const unsigned char *buffer,
|
||||
|
||||
opcode = buffer[index_buffer] & 15;
|
||||
|
||||
/* RSV1 indicates whether this message is compressed */
|
||||
compressed = (buffer[index_buffer] & 64) ? 1 : 0;
|
||||
|
||||
/* check if frame is masked */
|
||||
masked_frame = (buffer[index_buffer + 1] & 128) ? 1 : 0;
|
||||
|
||||
@@ -780,9 +783,9 @@ relay_websocket_decode_frame (const unsigned char *buffer,
|
||||
|
||||
/*
|
||||
* decompress data if frame is not empty and if "permessage-deflate"
|
||||
* is enabled
|
||||
* is enabled and the message is compressed
|
||||
*/
|
||||
if ((length_frame > 0) && ws_deflate && ws_deflate->enabled)
|
||||
if ((length_frame > 0) && ws_deflate && ws_deflate->enabled && compressed)
|
||||
{
|
||||
if (!ws_deflate->strm_inflate)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user