Merge pull request #54 from ty4tw/gateway

BugFix: Segmentation faultdue to incorrect ProtocolID of CONNECT. #53
This commit is contained in:
Tomoaki Yamaguchi
2017-05-18 19:10:42 +09:00
committed by GitHub
2 changed files with 10 additions and 4 deletions

View File

@@ -53,6 +53,7 @@ void ClientRecvTask::run()
{
Event* ev = 0;
Client* client = 0;
char buf[128];
while (true)
{
@@ -106,14 +107,19 @@ void ClientRecvTask::run()
{
MQTTSNPacket_connectData data;
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 */
client = _gateway->getClientList()->createClient(_sensorNetwork->getSenderAddress(), &data.clientID, false, false);
log(client, packet, &data.clientID);
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);
delete packet;
continue;

View File

@@ -38,7 +38,7 @@ int MQTTSNDeserialize_connect(MQTTSNPacket_connectData* data, unsigned char* buf
int mylen = 0;
FUNC_ENTRY;
curdata += (rc = MQTTSNPacket_decode(curdata, len, &mylen)); /* read length */
curdata += MQTTSNPacket_decode(curdata, len, &mylen); /* read length */
enddata = buf + mylen;
if (enddata - curdata < 2)
goto exit;
@@ -50,7 +50,7 @@ int MQTTSNDeserialize_connect(MQTTSNPacket_connectData* data, unsigned char* buf
data->cleansession = flags.bits.cleanSession;
data->willFlag = flags.bits.will;
if ((version = (int)readChar(&curdata)) != 1) /* Protocol version */
if ((version = (int)readChar(&curdata)) != MQTTSN_PROTOCOL_VERSION)
goto exit;
data->duration = readInt(&curdata);