diff --git a/src/PubSubClient.cpp b/src/PubSubClient.cpp index 022f90e..48ec1ce 100755 --- a/src/PubSubClient.cpp +++ b/src/PubSubClient.cpp @@ -165,15 +165,21 @@ boolean PubSubClient::connect(const char *id, const char *user, const char *pass buffer[length++] = ((MQTT_KEEPALIVE) >> 8); buffer[length++] = ((MQTT_KEEPALIVE) & 0xFF); + + CHECK_STRING_LENGTH(length,id) length = writeString(id,buffer,length); if (willTopic) { + CHECK_STRING_LENGTH(length,willTopic) length = writeString(willTopic,buffer,length); + CHECK_STRING_LENGTH(length,willMessage) length = writeString(willMessage,buffer,length); } if(user != NULL) { + CHECK_STRING_LENGTH(length,user) length = writeString(user,buffer,length); if(pass != NULL) { + CHECK_STRING_LENGTH(length,pass) length = writeString(pass,buffer,length); } } diff --git a/src/PubSubClient.h b/src/PubSubClient.h index 8fd8707..b476b63 100755 --- a/src/PubSubClient.h +++ b/src/PubSubClient.h @@ -83,6 +83,8 @@ #define MQTT_CALLBACK_SIGNATURE void (*callback)(char*, uint8_t*, unsigned int) #endif +#define CHECK_STRING_LENGTH(l,s) if (l+2+strlen(s) > MQTT_MAX_PACKET_SIZE) {_client->stop();return false;} + class PubSubClient : public Print { private: Client* _client;