eclipse / paho.mqtt-sn.embedded-c

Paho C MQTT-SN gateway and libraries for embedded systems. Paho is an Eclipse IoT project.
https://eclipse.org/paho
Other
314 stars 179 forks source link

Use unsigned data type in MQTTSNLenString #206

Closed a1lu closed 3 years ago

a1lu commented 4 years ago

Hi, I got the following warning:

MQTTSNSerializePublish.c: In function 'MQTTSNSerialize_register':
MQTTSNSerializePublish.c:235:70: warning: signed and unsigned type in conditional expression [-Wsign-compare]
     topicnamelen = (topicname->cstring) ? strlen(topicname->cstring) : topicname->lenstring.len;

The struct MQTTSNLenStrings len member is an signed int but is compared to strlens size_t return value.

The len member is written only in https://github.com/eclipse/paho.mqtt-sn.embedded-c/blob/ad86a276b56253f39686bc0a5984b4ebf39fe36f/MQTTSNPacket/src/MQTTSNPacket.c#L214

This would not work if len is unsized, but this could be changed to something like

    if (enddata > *pptr)
    {
        MQTTSNString->lenstring.len = enddata - *pptr;
        MQTTSNString->lenstring.data = (char*)*pptr;
        *pptr += MQTTSNString->lenstring.len;
    }
    else
    {
        MQTTSNString->lenstring.data = NULL;
        MQTTSNString->cstring = NULL;
        MQTTSNString->lenstring.len = 0
    }

Regards

ty4tw commented 3 years ago

Hi, This will be fixed as follows: topicnamelen = (topicname->cstring) ? (int)strlen(topicname->cstring) : topicname->lenstring.len;