- fixed - potential memory leaks in goose publisher code (#464)

pull/476/head
Michael Zillgith 2 years ago
parent 37453fd3c1
commit 23928b2b34

@ -65,8 +65,8 @@ GoosePublisher_createEx(CommParameters* parameters, const char* interfaceID, boo
{ {
GoosePublisher self = (GoosePublisher) GLOBAL_CALLOC(1, sizeof(struct sGoosePublisher)); GoosePublisher self = (GoosePublisher) GLOBAL_CALLOC(1, sizeof(struct sGoosePublisher));
if (self) { if (self)
{
if (prepareGooseBuffer(self, parameters, interfaceID, useVlanTag)) { if (prepareGooseBuffer(self, parameters, interfaceID, useVlanTag)) {
self->timestamp = MmsValue_newUtcTimeByMsTime(Hal_getTimeInMs()); self->timestamp = MmsValue_newUtcTimeByMsTime(Hal_getTimeInMs());
@ -76,7 +76,6 @@ GoosePublisher_createEx(CommParameters* parameters, const char* interfaceID, boo
GoosePublisher_destroy(self); GoosePublisher_destroy(self);
self = NULL; self = NULL;
} }
} }
return self; return self;
@ -91,20 +90,21 @@ GoosePublisher_create(CommParameters* parameters, const char* interfaceID)
void void
GoosePublisher_destroy(GoosePublisher self) GoosePublisher_destroy(GoosePublisher self)
{ {
if (self) { if (self)
{
if (self->ethernetSocket) { if (self->ethernetSocket) {
Ethernet_destroySocket(self->ethernetSocket); Ethernet_destroySocket(self->ethernetSocket);
} }
MmsValue_delete(self->timestamp); MmsValue_delete(self->timestamp);
if (self->goID != NULL) if (self->goID)
GLOBAL_FREEMEM(self->goID); GLOBAL_FREEMEM(self->goID);
if (self->goCBRef != NULL) if (self->goCBRef)
GLOBAL_FREEMEM(self->goCBRef); GLOBAL_FREEMEM(self->goCBRef);
if (self->dataSetRef != NULL) if (self->dataSetRef)
GLOBAL_FREEMEM(self->dataSetRef); GLOBAL_FREEMEM(self->dataSetRef);
if (self->buffer) if (self->buffer)
@ -117,18 +117,27 @@ GoosePublisher_destroy(GoosePublisher self)
void void
GoosePublisher_setGoID(GoosePublisher self, char* goID) GoosePublisher_setGoID(GoosePublisher self, char* goID)
{ {
if (self->goID)
GLOBAL_FREEMEM(self->goID);
self->goID = StringUtils_copyString(goID); self->goID = StringUtils_copyString(goID);
} }
void void
GoosePublisher_setGoCbRef(GoosePublisher self, char* goCbRef) GoosePublisher_setGoCbRef(GoosePublisher self, char* goCbRef)
{ {
if (self->goCBRef)
GLOBAL_FREEMEM(self->goCBRef);
self->goCBRef = StringUtils_copyString(goCbRef); self->goCBRef = StringUtils_copyString(goCbRef);
} }
void void
GoosePublisher_setDataSetRef(GoosePublisher self, char* dataSetRef) GoosePublisher_setDataSetRef(GoosePublisher self, char* dataSetRef)
{ {
if (self->dataSetRef)
GLOBAL_FREEMEM(self->dataSetRef);
self->dataSetRef = StringUtils_copyString(dataSetRef); self->dataSetRef = StringUtils_copyString(dataSetRef);
} }
@ -197,7 +206,7 @@ prepareGooseBuffer(GoosePublisher self, CommParameters* parameters, const char*
{ {
uint8_t srcAddr[6]; uint8_t srcAddr[6];
if (interfaceID != NULL) if (interfaceID)
Ethernet_getInterfaceMACAddress(interfaceID, srcAddr); Ethernet_getInterfaceMACAddress(interfaceID, srcAddr);
else else
Ethernet_getInterfaceMACAddress(CONFIG_ETHERNET_INTERFACE_ID, srcAddr); Ethernet_getInterfaceMACAddress(CONFIG_ETHERNET_INTERFACE_ID, srcAddr);
@ -209,7 +218,7 @@ prepareGooseBuffer(GoosePublisher self, CommParameters* parameters, const char*
uint16_t vlanId; uint16_t vlanId;
uint16_t appId; uint16_t appId;
if (parameters == NULL) { if (parameters) {
dstAddr = defaultDstAddr; dstAddr = defaultDstAddr;
priority = CONFIG_GOOSE_DEFAULT_PRIORITY; priority = CONFIG_GOOSE_DEFAULT_PRIORITY;
vlanId = CONFIG_GOOSE_DEFAULT_VLAN_ID; vlanId = CONFIG_GOOSE_DEFAULT_VLAN_ID;
@ -222,7 +231,7 @@ prepareGooseBuffer(GoosePublisher self, CommParameters* parameters, const char*
appId = parameters->appId; appId = parameters->appId;
} }
if (interfaceID != NULL) if (interfaceID)
self->ethernetSocket = Ethernet_createSocket(interfaceID, dstAddr); self->ethernetSocket = Ethernet_createSocket(interfaceID, dstAddr);
else else
self->ethernetSocket = Ethernet_createSocket(CONFIG_ETHERNET_INTERFACE_ID, dstAddr); self->ethernetSocket = Ethernet_createSocket(CONFIG_ETHERNET_INTERFACE_ID, dstAddr);
@ -294,7 +303,7 @@ createGoosePayload(GoosePublisher self, LinkedList dataSetValues, uint8_t* buffe
goosePduLength += BerEncoder_determineEncodedStringSize(self->dataSetRef); goosePduLength += BerEncoder_determineEncodedStringSize(self->dataSetRef);
if (self->goID != NULL) if (self->goID)
goosePduLength += BerEncoder_determineEncodedStringSize(self->goID); goosePduLength += BerEncoder_determineEncodedStringSize(self->goID);
else else
goosePduLength += BerEncoder_determineEncodedStringSize(self->goCBRef); goosePduLength += BerEncoder_determineEncodedStringSize(self->goCBRef);
@ -317,7 +326,7 @@ createGoosePayload(GoosePublisher self, LinkedList dataSetValues, uint8_t* buffe
LinkedList element = LinkedList_getNext(dataSetValues); LinkedList element = LinkedList_getNext(dataSetValues);
while (element != NULL) { while (element) {
MmsValue* dataSetEntry = (MmsValue*) element->data; MmsValue* dataSetEntry = (MmsValue*) element->data;
if (dataSetEntry) { if (dataSetEntry) {
@ -358,7 +367,7 @@ createGoosePayload(GoosePublisher self, LinkedList dataSetValues, uint8_t* buffe
bufPos = BerEncoder_encodeStringWithTag(0x82, self->dataSetRef, buffer, bufPos); bufPos = BerEncoder_encodeStringWithTag(0x82, self->dataSetRef, buffer, bufPos);
/* Encode goID */ /* Encode goID */
if (self->goID != NULL) if (self->goID)
bufPos = BerEncoder_encodeStringWithTag(0x83, self->goID, buffer, bufPos); bufPos = BerEncoder_encodeStringWithTag(0x83, self->goID, buffer, bufPos);
else else
bufPos = BerEncoder_encodeStringWithTag(0x83, self->goCBRef, buffer, bufPos); bufPos = BerEncoder_encodeStringWithTag(0x83, self->goCBRef, buffer, bufPos);
@ -390,7 +399,7 @@ createGoosePayload(GoosePublisher self, LinkedList dataSetValues, uint8_t* buffe
/* Encode data set entries */ /* Encode data set entries */
element = LinkedList_getNext(dataSetValues); element = LinkedList_getNext(dataSetValues);
while (element != NULL) { while (element) {
MmsValue* dataSetEntry = (MmsValue*) element->data; MmsValue* dataSetEntry = (MmsValue*) element->data;
if (dataSetEntry) { if (dataSetEntry) {

Loading…
Cancel
Save