From 695bbc33c81049e46c7d131088c25498cdb3e283 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Tue, 12 Jan 2021 10:22:04 +0000 Subject: [PATCH] Fix calculation of remaining length parameter for websockets clients. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Only affects those clients that send fragmented packets. Closes #1974. Thanks to 贺亚东. --- ChangeLog.txt | 8 ++++++++ src/websockets.c | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 4e8bde1f22..06fa2b911a 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,3 +1,11 @@ +2.0.6 - 2021-01-xx +================== + +Broker: +- Fix calculation of remaining length parameter for websockets clients that + send fragmented packets. Closes #1974. + + 2.0.5 - 2021-01-11 ================== diff --git a/src/websockets.c b/src/websockets.c index ac966876ad..66d6edd362 100644 --- a/src/websockets.c +++ b/src/websockets.c @@ -332,7 +332,7 @@ static int callback_mqtt( mosq->in_packet.remaining_length += (byte & 127) * mosq->in_packet.remaining_mult; mosq->in_packet.remaining_mult *= 128; }while((byte & 128) != 0); - mosq->in_packet.remaining_count = (int8_t)(mosq->in_packet.remaining_count -1); + mosq->in_packet.remaining_count = (int8_t)(mosq->in_packet.remaining_count * -1); if(mosq->in_packet.remaining_length > 0){ mosq->in_packet.payload = mosquitto__malloc(mosq->in_packet.remaining_length*sizeof(uint8_t));