adafruit / Adafruit_MQTT_Library

Arduino library for MQTT support
MIT License
571 stars 291 forks source link

connectPacket: send a second length-byte if payload is larger than >127 Byte #189

Open fipwmaqzufheoxq92ebc opened 3 years ago

fipwmaqzufheoxq92ebc commented 3 years ago

The connectPacket-method of Adafruit_MQTT uses only one byte for the remaining-length-field of the CONNECT-Packet. If the Packet is greater than 127 Byte, an invalid packet is sent, as the highest bit is set, but no additional length-byte is added. This PR adds code which checks the length and adds one byte if necessary. The MQTT-Protocol allows up to 4 bytes for the length-field, but as the buffer is currently limited to 150 Byte, I only use up to 2 Bytes. I tested the code on an ESP8266, but it should work for other platforms too.

I had the same issue like #108. topic/message of last-will are send in the CONNECT-Packet, which caused the Packet to be larger than 127 Byte, and triggered the bug.