Commit 60ac1cde91c67f666fe78b670abc3a6fea6f44f9

Authored by Peter M. Groen
1 parent cf0166d6

[Fix] Bugfix in hasWildcard

src/mqttclient.cpp
@@ -215,9 +215,17 @@ void MqttClient::disconnect() @@ -215,9 +215,17 @@ void MqttClient::disconnect()
215 215
216 Token MqttClient::publish(const MqttMessage& message, int qos) 216 Token MqttClient::publish(const MqttMessage& message, int qos)
217 { 217 {
218 - if (hasWildcard(message.topic()) || !isValidTopic(message.topic())) { 218 + if (hasWildcard(message.topic()))
  219 + {
  220 + LogDebug("[MqttClient::publish]","Topic has wildcard : " + message.topic());
219 return Token(m_clientId, -1); 221 return Token(m_clientId, -1);
220 } 222 }
  223 + else if(!isValidTopic(message.topic()))
  224 + {
  225 + LogDebug("[MqttClient::publish]","Topic is invalid : " + message.topic());
  226 + return Token(m_clientId, -1);
  227 + }
  228 +
221 OSDEV_COMPONENTS_LOCKGUARD(m_interfaceMutex); 229 OSDEV_COMPONENTS_LOCKGUARD(m_interfaceMutex);
222 IMqttClientImpl* client(nullptr); 230 IMqttClientImpl* client(nullptr);
223 { 231 {
@@ -239,6 +247,13 @@ Token MqttClient::publish(const MqttMessage& message, int qos) @@ -239,6 +247,13 @@ Token MqttClient::publish(const MqttMessage& message, int qos)
239 } 247 }
240 client = m_principalClient.get(); 248 client = m_principalClient.get();
241 } 249 }
  250 +
  251 + if(!client)
  252 + {
  253 + LogDebug("[MqttClient::publish]", "Invalid pointer to IMqttClient retrieved.");
  254 + return Token(m_clientId, -1);
  255 + }
  256 +
242 return Token(client->clientId(), client->publish(message, qos)); 257 return Token(client->clientId(), client->publish(message, qos));
243 } 258 }
244 259
src/mqttutil.cpp
@@ -55,7 +55,12 @@ bool isValidTopic( const std::string &topic ) @@ -55,7 +55,12 @@ bool isValidTopic( const std::string &topic )
55 55
56 bool hasWildcard( const std::string &topic ) 56 bool hasWildcard( const std::string &topic )
57 { 57 {
58 - return ( topic.size() > 0 && (topic.find( '+' ) != std::string::npos || topic.size() - 1 == '#' ) ); 58 + return ( topic.size() > 0 &&
  59 + (
  60 + topic.find( '+' ) != std::string::npos ||
  61 + topic.back() == '#'
  62 + )
  63 + );
59 } 64 }
60 65
61 bool testForOverlap( const std::string &existingTopic, const std::string &newTopic ) 66 bool testForOverlap( const std::string &existingTopic, const std::string &newTopic )