BUG/MINOR: mqtt: Support empty client ID in CONNECT message
As specified by the MQTT specification (MQTT-3.1.3-6), the client ID may be
empty. That means the length of the client ID string may be 0. However, The
MQTT parser does not support empty strings.
So, to fix the bug, the mqtt_read_string() function may now parse empty
string. 2 bytes must be found to decode the string length, but the length
may be 0 now. It is the caller responsibility to test the string emptiness
if necessary. In addition, in mqtt_parse_connect(), the client ID may be
empty now.
This patch should partely fix the issue #1310. It must be backported to 2.4.
(cherry picked from commit 0de0becf0b024b6beca9c5f7e1ed8a08120d781c)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/src/mqtt.c b/src/mqtt.c
index 8a6b6a0..6624201 100644
--- a/src/mqtt.c
+++ b/src/mqtt.c
@@ -291,7 +291,7 @@
uint16_t len = 0;
/* read and compute the string length */
- if (istlen(parser) <= 2)
+ if (istlen(parser) < 2)
goto error;
parser = mqtt_read_2byte_int(parser, &len);
@@ -862,7 +862,7 @@
*/
/* read client identifier */
parser = mqtt_read_string(parser, &mpkt->data.connect.payload.client_identifier);
- if (!isttest(parser) || !istlen(mpkt->data.connect.payload.client_identifier))
+ if (!isttest(parser))
goto end;
/* read Will Properties, for MQTT v5 only