Skip to content

Commit

Permalink
Fix parse_remaining_length for sharding data
Browse files Browse the repository at this point in the history
Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>
  • Loading branch information
zhaojh329 committed Dec 26, 2020
1 parent 3806c7a commit 0809ca2
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
9 changes: 5 additions & 4 deletions src/umqtt.c
Expand Up @@ -609,6 +609,7 @@ static int parse_fixed_header(struct umqtt_client *cl)
pkt->type = data[0] >> 4;
pkt->flags = data[0] & 0xF;

pkt->remlen_mul = 1;
pkt->remlen = data[1] & 0x7F;
more_remlen = data[1] & 0x80;

Expand Down Expand Up @@ -649,10 +650,10 @@ static int parse_remaining_length(struct umqtt_client *cl)
size_t data_len = buffer_length(rb);
uint32_t parsed = 0;

uint32_t mul = 1;
while (parsed < UMQTT_MAX_REMLEN_BYTES && parsed < data_len) {
mul = mul << 7;
pkt->remlen += mul * (data[parsed] & 0x7F);
while (parsed < data_len) {
pkt->remlen_mul = pkt->remlen_mul << 7;
pkt->remlen += pkt->remlen_mul * (data[parsed] & 0x7F);

if ((data[parsed++] & 0x80) == 0) {
cl->state = UMQTT_STATE_HANDLE_PACKET;
break;
Expand Down
2 changes: 1 addition & 1 deletion src/umqtt.h
Expand Up @@ -42,7 +42,6 @@
#define UMQTT_MAX_CONNECT_TIME 5 /* second */

#define UMQTT_MAX_REMLEN 268435455
#define UMQTT_MAX_REMLEN_BYTES 4

/* MQTT Control Packet type */
enum {
Expand Down Expand Up @@ -123,6 +122,7 @@ struct umqtt_packet {
uint8_t type;
uint8_t flags;
uint32_t remlen;
uint32_t remlen_mul;
struct umqtt_message *msg;
};

Expand Down

0 comments on commit 0809ca2

Please sign in to comment.