Skip to content

Commit 4205f71

Browse files
committed
Fix outgoing maximum-packet-size limit check.
Closes #3503. Thanks to Julian Graf.
1 parent 36be278 commit 4205f71

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

ChangeLog.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
of that client. Closes #3487.
77
- Fix password length not being passed to MOSQ_EVT_BASIC_AUTH events.
88
Closes #3490.
9+
- Fix incorrect maximum-packet-size restriction. Closes #3503.
910

1011
# Common lib:
1112
- Fix potential crash if reading a file in restricted mode and the group id

lib/packet_mosq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ int packet__check_oversize(struct mosquitto *mosq, uint32_t remaining_length)
238238
return MOSQ_ERR_SUCCESS;
239239
}
240240

241-
len = remaining_length + mosquitto_varint_bytes(remaining_length);
241+
len = 1 + remaining_length + mosquitto_varint_bytes(remaining_length);
242242
if(len > mosq->maximum_packet_size){
243243
return MOSQ_ERR_OVERSIZE_PACKET;
244244
}else{

test/broker/12-prop-maximum-packet-size-publish-qos1.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,18 @@ def do_test(start_broker):
1717
suback_packet = mosq_test.gen_suback(mid, 1, proto_ver=5)
1818

1919
mid=1
20-
publish1_packet = mosq_test.gen_publish(topic="12/max/publish/qos1/test/topic", mid=mid, qos=1, payload="12345678901234567890", proto_ver=5)
20+
publish1_packet = mosq_test.gen_publish(topic="12/max/publish/qos1/test/topic", mid=mid, qos=1, payload="1234", proto_ver=5)
2121
puback1_packet = mosq_test.gen_puback(mid, proto_ver=5)
2222

2323
mid=2
24-
publish2_packet = mosq_test.gen_publish(topic="12/max/publish/qos1/test/topic", mid=mid, qos=1, payload="7890", proto_ver=5)
24+
props = mqtt5_props.gen_byte_prop(mqtt5_props.PAYLOAD_FORMAT_INDICATOR, 1)
25+
publish2_packet = mosq_test.gen_publish(topic="12/max/publish/qos1/test/topic", mid=mid, qos=1, payload="56", proto_ver=5, properties=props)
2526
puback2_packet = mosq_test.gen_puback(mid, proto_ver=5)
2627

28+
mid=3
29+
publish3_packet = mosq_test.gen_publish(topic="12/max/publish/qos1/test/topic", mid=mid, qos=1, payload="789", proto_ver=5)
30+
puback3_packet = mosq_test.gen_puback(mid, proto_ver=5)
31+
2732
port = mosq_test.get_port()
2833
if start_broker:
2934
broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port)
@@ -33,12 +38,15 @@ def do_test(start_broker):
3338
mosq_test.do_send_receive(sock, subscribe_packet, suback_packet)
3439

3540
mosq_test.do_send_receive(sock, publish1_packet, puback1_packet, "puback 1")
41+
# We shouldn't receive the publish here because it is > MAXIMUM_PACKET_SIZE
42+
mosq_test.do_ping(sock)
3643

44+
mosq_test.do_send_receive(sock, publish2_packet, puback2_packet, "puback 2")
3745
# We shouldn't receive the publish here because it is > MAXIMUM_PACKET_SIZE
3846
mosq_test.do_ping(sock)
3947

40-
sock.send(publish2_packet)
41-
mosq_test.receive_unordered(sock, puback2_packet, publish2_packet, "puback 2/publish2")
48+
sock.send(publish3_packet)
49+
mosq_test.receive_unordered(sock, puback3_packet, publish3_packet, "puback 3/publish3")
4250
rc = 0
4351
except mosq_test.TestError:
4452
pass

test/broker/12-prop-maximum-packet-size-publish-qos2.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ def do_test(start_broker):
1717
suback_packet = mosq_test.gen_suback(mid, 2, proto_ver=5)
1818

1919
mid=1
20-
publish1_packet = mosq_test.gen_publish(topic="12/max/publish/qos2/test/topic", mid=mid, qos=2, payload="12345678901234567890", proto_ver=5)
20+
publish1_packet = mosq_test.gen_publish(topic="12/max/publish/qos2/test/topic", mid=mid, qos=2, payload="1234", proto_ver=5)
2121
pubrec1_packet = mosq_test.gen_pubrec(mid, proto_ver=5)
2222
pubrel1_packet = mosq_test.gen_pubrel(mid, proto_ver=5)
2323
pubcomp1_packet = mosq_test.gen_pubcomp(mid, proto_ver=5)
2424

2525
mid=2
26-
publish2_packet = mosq_test.gen_publish(topic="12/max/publish/qos2/test/topic", mid=mid, qos=2, payload="7890", proto_ver=5)
26+
publish2_packet = mosq_test.gen_publish(topic="12/max/publish/qos2/test/topic", mid=mid, qos=2, payload="789", proto_ver=5)
2727
pubrec2_packet = mosq_test.gen_pubrec(mid, proto_ver=5)
2828
pubrel2_packet = mosq_test.gen_pubrel(mid, proto_ver=5)
2929
pubcomp2_packet = mosq_test.gen_pubcomp(mid, proto_ver=5)

0 commit comments

Comments
 (0)