mirror of
https://github.com/eclipse/paho.mqtt-sn.embedded-c.git
synced 2025-12-13 23:46:51 +01:00
BugFix: Segmentation faultdue to incorrect ProtocolID of CONNECT. #53
Signed-off-by: tomoaki <tomoaki@tomy-tech.com>
This commit is contained in:
@@ -53,6 +53,7 @@ void ClientRecvTask::run()
|
|||||||
{
|
{
|
||||||
Event* ev = 0;
|
Event* ev = 0;
|
||||||
Client* client = 0;
|
Client* client = 0;
|
||||||
|
char buf[128];
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
@@ -106,14 +107,19 @@ void ClientRecvTask::run()
|
|||||||
{
|
{
|
||||||
MQTTSNPacket_connectData data;
|
MQTTSNPacket_connectData data;
|
||||||
memset(&data, 0, sizeof(MQTTSNPacket_connectData));
|
memset(&data, 0, sizeof(MQTTSNPacket_connectData));
|
||||||
packet->getCONNECT(&data);
|
if ( !packet->getCONNECT(&data) )
|
||||||
|
{
|
||||||
|
log(0, packet, &data.clientID);
|
||||||
|
WRITELOG("%s CONNECT message form %s is incorrect.%s\n", ERRMSG_HEADER, _sensorNetwork->getSenderAddress()->sprint(buf), ERRMSG_FOOTER);
|
||||||
|
delete packet;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* create a client */
|
/* create a client */
|
||||||
client = _gateway->getClientList()->createClient(_sensorNetwork->getSenderAddress(), &data.clientID, false, false);
|
client = _gateway->getClientList()->createClient(_sensorNetwork->getSenderAddress(), &data.clientID, false, false);
|
||||||
log(client, packet, &data.clientID);
|
log(client, packet, &data.clientID);
|
||||||
if (!client)
|
if (!client)
|
||||||
{
|
{
|
||||||
char buf[128];
|
|
||||||
WRITELOG("%s Client(%s) was rejected. CONNECT message has been discarded.%s\n", ERRMSG_HEADER, _sensorNetwork->getSenderAddress()->sprint(buf), ERRMSG_FOOTER);
|
WRITELOG("%s Client(%s) was rejected. CONNECT message has been discarded.%s\n", ERRMSG_HEADER, _sensorNetwork->getSenderAddress()->sprint(buf), ERRMSG_FOOTER);
|
||||||
delete packet;
|
delete packet;
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ int MQTTSNDeserialize_connect(MQTTSNPacket_connectData* data, unsigned char* buf
|
|||||||
int mylen = 0;
|
int mylen = 0;
|
||||||
|
|
||||||
FUNC_ENTRY;
|
FUNC_ENTRY;
|
||||||
curdata += (rc = MQTTSNPacket_decode(curdata, len, &mylen)); /* read length */
|
curdata += MQTTSNPacket_decode(curdata, len, &mylen); /* read length */
|
||||||
enddata = buf + mylen;
|
enddata = buf + mylen;
|
||||||
if (enddata - curdata < 2)
|
if (enddata - curdata < 2)
|
||||||
goto exit;
|
goto exit;
|
||||||
@@ -50,7 +50,7 @@ int MQTTSNDeserialize_connect(MQTTSNPacket_connectData* data, unsigned char* buf
|
|||||||
data->cleansession = flags.bits.cleanSession;
|
data->cleansession = flags.bits.cleanSession;
|
||||||
data->willFlag = flags.bits.will;
|
data->willFlag = flags.bits.will;
|
||||||
|
|
||||||
if ((version = (int)readChar(&curdata)) != 1) /* Protocol version */
|
if ((version = (int)readChar(&curdata)) != MQTTSN_PROTOCOL_VERSION)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
data->duration = readInt(&curdata);
|
data->duration = readInt(&curdata);
|
||||||
|
|||||||
Reference in New Issue
Block a user