From 2dca84a77682f2a4e845dac20c4f5ae6b1fd349a Mon Sep 17 00:00:00 2001 From: Alex Ignatov Date: Wed, 21 Nov 2018 03:09:08 +0200 Subject: [PATCH] Fix publish() when payload == NULL Messages with empty payload are completely valid and are actually useful (e.g., to delete retained value). This adds a check before calling `strlen()` to prevent crash when using shortcut methods taking `const char*` --- src/PubSubClient.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/PubSubClient.cpp b/src/PubSubClient.cpp index 0fa420d..aca2181 100755 --- a/src/PubSubClient.cpp +++ b/src/PubSubClient.cpp @@ -366,11 +366,11 @@ boolean PubSubClient::loop() { } boolean PubSubClient::publish(const char* topic, const char* payload) { - return publish(topic,(const uint8_t*)payload,strlen(payload),false); + return publish(topic,(const uint8_t*)payload, payload ? strlen(payload) : 0,false); } boolean PubSubClient::publish(const char* topic, const char* payload, boolean retained) { - return publish(topic,(const uint8_t*)payload,strlen(payload),retained); + return publish(topic,(const uint8_t*)payload, payload ? strlen(payload) : 0,retained); } boolean PubSubClient::publish(const char* topic, const uint8_t* payload, unsigned int plength) { @@ -400,7 +400,7 @@ boolean PubSubClient::publish(const char* topic, const uint8_t* payload, unsigne } boolean PubSubClient::publish_P(const char* topic, const char* payload, boolean retained) { - return publish_P(topic, (const uint8_t*)payload, strlen(payload), retained); + return publish_P(topic, (const uint8_t*)payload, payload ? strlen(payload) : 0, retained); } boolean PubSubClient::publish_P(const char* topic, const uint8_t* payload, unsigned int plength, boolean retained) {