diff --git a/reg-tests/converter/mqtt.vtc b/reg-tests/converter/mqtt.vtc index 15d03ed7a..59818246a 100644 --- a/reg-tests/converter/mqtt.vtc +++ b/reg-tests/converter/mqtt.vtc @@ -4,8 +4,8 @@ varnishtest "mqtt converters Test" feature ignore_unknown_macro server s1 { - # MQTT 3.1.1 CONNECT packet (id: test_sub) - recv 22 + # MQTT 3.1.1 CONNECT packet (id: test_subaaaaaa... [len = 200]) + recv 215 sendhex "20020000" close @@ -114,7 +114,7 @@ haproxy h1 -conf { client c1_311_1 -connect ${h1_fe1_sock} { # Valid MQTT 3.1.1 CONNECT packet (id: test_sub) - sendhex "101400044d5154540402003c0008746573745f737562" + sendhex "10d40100044d5154540402003c00c8746573745f737562616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161" recv 4 expect_close } -run diff --git a/src/mqtt.c b/src/mqtt.c index 7679cbae6..8a6b6a065 100644 --- a/src/mqtt.c +++ b/src/mqtt.c @@ -288,15 +288,14 @@ static inline struct ist mqtt_read_varint(struct ist parser, uint32_t *i) */ static inline struct ist mqtt_read_string(struct ist parser, struct ist *str) { - uint16_t len; + uint16_t len = 0; /* read and compute the string length */ if (istlen(parser) <= 2) goto error; - len = ((uint16_t)*istptr(parser) << 8) + (uint16_t)*(istptr(parser) + 1); - parser = istadv(parser, 2); - if (istlen(parser) < len) + parser = mqtt_read_2byte_int(parser, &len); + if (!isttest(parser) || istlen(parser) < len) goto error; if (str) {