From 76e016f59d18f403a4eb27723fd6578a0172aec0 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Thu, 15 Feb 2024 16:56:44 +0000 Subject: [PATCH] - IedConnection: fixed potential memory leak in getDataSetHandlerInternal --- src/iec61850/client/ied_connection.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/iec61850/client/ied_connection.c b/src/iec61850/client/ied_connection.c index bc581dea..71058942 100644 --- a/src/iec61850/client/ied_connection.c +++ b/src/iec61850/client/ied_connection.c @@ -3703,25 +3703,28 @@ getDataSetHandlerInternal(uint32_t invokeId, void* parameter, MmsError err, MmsV IedConnectionOutstandingCall call = iedConnection_lookupOutstandingCall(self, invokeId); - if (call) { - + if (call) + { IedConnection_ReadDataSetHandler handler = (IedConnection_ReadDataSetHandler) call->callback; ClientDataSet dataSet = (ClientDataSet) call->specificParameter; char* dataSetReference = (char*) call->specificParameter2.pointer; - if (value != NULL) { - + if (value) + { if (dataSet == NULL) { dataSet = ClientDataSet_create(dataSetReference); ClientDataSet_setDataSetValues(dataSet, value); - GLOBAL_FREEMEM(dataSetReference); } else { MmsValue* dataSetValues = ClientDataSet_getValues(dataSet); MmsValue_update(dataSetValues, value); - MmsValue_delete(value); } + + if (dataSetReference) + GLOBAL_FREEMEM(dataSetReference); + + MmsValue_delete(value); } handler(invokeId, call->callbackParameter, iedConnection_mapMmsErrorToIedError(err), dataSet);