Fix memleak which is reported by cppcheck.

Signed-off-by: dream <dreamoftime0@gmail.com>
This commit is contained in:
dream 2025-02-20 11:09:00 +08:00 committed by Ian Craggs
parent 343506e6cb
commit 3f5b987f3b
No known key found for this signature in database
GPG Key ID: A7AE1A8F2CCAB186
1 changed files with 38 additions and 1 deletions

View File

@ -1017,7 +1017,7 @@ int MQTTAsync_inCallback()
int MQTTAsync_subscribeMany(MQTTAsync handle, int count, char* const* topic, const int* qos, MQTTAsync_responseOptions* response)
{
MQTTAsyncs* m = handle;
int i = 0;
int i = 0, j = 0;
int rc = MQTTASYNC_SUCCESS;
MQTTAsync_queuedCommand* sub;
int msgid = 0;
@ -1091,6 +1091,10 @@ int MQTTAsync_subscribeMany(MQTTAsync handle, int count, char* const* topic, con
if ((sub->command.details.sub.optlist = malloc(sizeof(MQTTSubscribe_options) * count)) == NULL)
{
rc = PAHO_MEMORY_ERROR;
if(sub)
{
free(sub);
}
goto exit;
}
if (response->subscribeOptionsCount == 0)
@ -1118,6 +1122,21 @@ int MQTTAsync_subscribeMany(MQTTAsync handle, int count, char* const* topic, con
if ((sub->command.details.sub.topics[i] = MQTTStrdup(topic[i])) == NULL)
{
rc = PAHO_MEMORY_ERROR;
for(j = 0; j < i; ++j)
{
if(sub->command.details.sub.topics[j])
{
free(sub->command.details.sub.topics[j]);
}
}
if(sub->command.details.sub.optlist)
{
free(sub->command.details.sub.optlist);
}
free(sub->command.details.sub.topics);
free(sub->command.details.sub.qoss);
free(sub);
goto exit;
}
sub->command.details.sub.qoss[i] = qos[i];
@ -1125,7 +1144,25 @@ int MQTTAsync_subscribeMany(MQTTAsync handle, int count, char* const* topic, con
rc = MQTTAsync_addCommand(sub, sizeof(sub));
}
else
{
rc = PAHO_MEMORY_ERROR;
if(sub->command.details.sub.optlist)
{
free(sub->command.details.sub.optlist);
}
if(sub->command.details.sub.topics)
{
free(sub->command.details.sub.topics);
}
if(sub->command.details.sub.qoss)
{
free(sub->command.details.sub.qoss);
}
if(sub)
{
free(sub);
}
}
exit:
if (!MQTTAsync_inCallback())