From 42d49fc095ae840a0452b76e5e2cf6335a707db1 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Sun, 15 Feb 2026 22:05:06 +0000 Subject: [PATCH] Fix outgoing maximum-packet-size limit check. Closes #3503. Thanks to Julian Graf. --- ChangeLog.txt | 1 + lib/packet_mosq.c | 2 +- test/broker/12-prop-maximum-packet-size-publish-qos1.py | 4 ++-- test/broker/12-prop-maximum-packet-size-publish-qos2.py | 4 ++-- test/lib/11-prop-oversize-packet.py | 4 ++-- test/lib/c/11-prop-oversize-packet.c | 4 ++-- 6 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index c1a80531..c1f78a15 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -14,6 +14,7 @@ Broker: mosquitto 1.5 or earlier is loaded. Closes #3439. - Limit auto_id_prefix to 50 characters. Closes #3440. - Fix max_connections not being honoured on websockets listeners. Closes #3455. +- Fix outgoing maximum-packet-size limit check. Closes #3503. Library: - Fix mosquitto_loop_start() leaving the mosq stuct in an invalid state if diff --git a/lib/packet_mosq.c b/lib/packet_mosq.c index 9086ea82..545afbf3 100644 --- a/lib/packet_mosq.c +++ b/lib/packet_mosq.c @@ -215,7 +215,7 @@ int packet__check_oversize(struct mosquitto *mosq, uint32_t remaining_length) if(mosq->maximum_packet_size == 0) return MOSQ_ERR_SUCCESS; - len = remaining_length + packet__varint_bytes(remaining_length); + len = 1 + remaining_length + packet__varint_bytes(remaining_length); if(len > mosq->maximum_packet_size){ return MOSQ_ERR_OVERSIZE_PACKET; }else{ diff --git a/test/broker/12-prop-maximum-packet-size-publish-qos1.py b/test/broker/12-prop-maximum-packet-size-publish-qos1.py index f2686026..9a27a6b0 100755 --- a/test/broker/12-prop-maximum-packet-size-publish-qos1.py +++ b/test/broker/12-prop-maximum-packet-size-publish-qos1.py @@ -17,11 +17,11 @@ subscribe_packet = mosq_test.gen_subscribe(mid, "test/topic", 1, proto_ver=5) suback_packet = mosq_test.gen_suback(mid, 1, proto_ver=5) mid=1 -publish1_packet = mosq_test.gen_publish(topic="test/topic", mid=mid, qos=1, payload="12345678901234567890", proto_ver=5) +publish1_packet = mosq_test.gen_publish(topic="test/topic", mid=mid, qos=1, payload="1234", proto_ver=5) puback1_packet = mosq_test.gen_puback(mid, proto_ver=5) mid=2 -publish2_packet = mosq_test.gen_publish(topic="test/topic", mid=mid, qos=1, payload="7890", proto_ver=5) +publish2_packet = mosq_test.gen_publish(topic="test/topic", mid=mid, qos=1, payload="789", proto_ver=5) puback2_packet = mosq_test.gen_puback(mid, proto_ver=5) port = mosq_test.get_port() diff --git a/test/broker/12-prop-maximum-packet-size-publish-qos2.py b/test/broker/12-prop-maximum-packet-size-publish-qos2.py index 5fcee737..4fde358b 100755 --- a/test/broker/12-prop-maximum-packet-size-publish-qos2.py +++ b/test/broker/12-prop-maximum-packet-size-publish-qos2.py @@ -17,13 +17,13 @@ subscribe_packet = mosq_test.gen_subscribe(mid, "test/topic", 2, proto_ver=5) suback_packet = mosq_test.gen_suback(mid, 2, proto_ver=5) mid=1 -publish1_packet = mosq_test.gen_publish(topic="test/topic", mid=mid, qos=2, payload="12345678901234567890", proto_ver=5) +publish1_packet = mosq_test.gen_publish(topic="test/topic", mid=mid, qos=2, payload="1234", proto_ver=5) pubrec1_packet = mosq_test.gen_pubrec(mid, proto_ver=5) pubrel1_packet = mosq_test.gen_pubrel(mid, proto_ver=5) pubcomp1_packet = mosq_test.gen_pubcomp(mid, proto_ver=5) mid=2 -publish2_packet = mosq_test.gen_publish(topic="test/topic", mid=mid, qos=2, payload="7890", proto_ver=5) +publish2_packet = mosq_test.gen_publish(topic="test/topic", mid=mid, qos=2, payload="789", proto_ver=5) pubrec2_packet = mosq_test.gen_pubrec(mid, proto_ver=5) pubrel2_packet = mosq_test.gen_pubrel(mid, proto_ver=5) pubcomp2_packet = mosq_test.gen_pubcomp(mid, proto_ver=5) diff --git a/test/lib/11-prop-oversize-packet.py b/test/lib/11-prop-oversize-packet.py index 5f09437f..cf3146be 100755 --- a/test/lib/11-prop-oversize-packet.py +++ b/test/lib/11-prop-oversize-packet.py @@ -14,8 +14,8 @@ connect_packet = mosq_test.gen_connect("publish-qos0-test", keepalive=keepalive, props = mqtt5_props.gen_uint32_prop(mqtt5_props.PROP_MAXIMUM_PACKET_SIZE, 30) connack_packet = mosq_test.gen_connack(rc=0, proto_ver=5, properties=props) -bad_publish_packet = mosq_test.gen_publish("pub/test", qos=0, payload="0123456789012345678", proto_ver=5) -publish_packet = mosq_test.gen_publish("pub/test", qos=0, payload="012345678901234567", proto_ver=5) +bad_publish_packet = mosq_test.gen_publish("pub/test", qos=0, payload="123456789012345678", proto_ver=5) +publish_packet = mosq_test.gen_publish("pub/test", qos=0, payload="12345678901234567", proto_ver=5) disconnect_packet = mosq_test.gen_disconnect() diff --git a/test/lib/c/11-prop-oversize-packet.c b/test/lib/c/11-prop-oversize-packet.c index ac4c00b8..8ca6aa26 100644 --- a/test/lib/c/11-prop-oversize-packet.c +++ b/test/lib/c/11-prop-oversize-packet.c @@ -24,12 +24,12 @@ void on_connect(struct mosquitto *mosq, void *obj, int rc) exit(1); } - rc = mosquitto_publish(mosq, &sent_mid, "pub/test", strlen("0123456789012345678"), "0123456789012345678", 0, false); + rc = mosquitto_publish(mosq, &sent_mid, "pub/test", strlen("123456789012345678"), "123456789012345678", 0, false); if(rc != MOSQ_ERR_OVERSIZE_PACKET){ printf("Fail on publish 1\n"); exit(1); } - rc = mosquitto_publish(mosq, &sent_mid, "pub/test", strlen("012345678901234567"), "012345678901234567", 0, false); + rc = mosquitto_publish(mosq, &sent_mid, "pub/test", strlen("12345678901234567"), "12345678901234567", 0, false); if(rc != MOSQ_ERR_SUCCESS){ printf("Fail on publish 2\n"); exit(1);