Honour which_payload_variant on MQTT client-proxy ingress (#11097)

This commit is contained in:
Thomas Göttgens
2026-07-21 09:08:46 +02:00
committed by GitHub
parent 8b0f29026a
commit b299cc2427
2 changed files with 47 additions and 1 deletions
+14 -1
View File
@@ -337,7 +337,20 @@ void MQTT::mqttCallback(char *topic, byte *payload, unsigned int length)
void MQTT::onClientProxyReceive(meshtastic_MqttClientProxyMessage msg)
{
onReceive(msg.topic, msg.payload_variant.data.bytes, msg.payload_variant.data.size);
// payload_variant is a union: on the text variant, data.size aliases the first bytes of the
// string, so reading it unconditionally let a client name any length up to PB_SIZE_MAX.
switch (msg.which_payload_variant) {
case meshtastic_MqttClientProxyMessage_data_tag:
onReceive(msg.topic, msg.payload_variant.data.bytes, msg.payload_variant.data.size);
break;
case meshtastic_MqttClientProxyMessage_text_tag:
onReceive(msg.topic, (byte *)msg.payload_variant.text,
strnlen(msg.payload_variant.text, sizeof(msg.payload_variant.text)));
break;
default:
LOG_WARN("MQTT proxy message carries no payload, topic %s", msg.topic);
break;
}
}
void MQTT::onReceive(char *topic, byte *payload, size_t length)