fix: memory leak at msc_tree

This commit is contained in:
Burkov Egor 2025-07-29 15:45:26 +03:00
parent 1ff9f2a943
commit d4ec786c7f

View File

@ -407,8 +407,10 @@ TreeNode *CPTAddElement(unsigned char *ipdata, unsigned int ip_bitmask, CPTTree
CPTData *prefix_data = CPTCreateCPTData(netmask); CPTData *prefix_data = CPTCreateCPTData(netmask);
CPTAppendToCPTDataList(prefix_data, &prefix->prefix_data); CPTAppendToCPTDataList(prefix_data, &prefix->prefix_data);
if(CheckBitmask(netmask, ip_bitmask)) if(CheckBitmask(netmask, ip_bitmask)) {
free(prefix);
return node; return node;
}
parent = node->parent; parent = node->parent;
while (parent != NULL && netmask < (parent->bit + 1)) { while (parent != NULL && netmask < (parent->bit + 1)) {
@ -423,6 +425,7 @@ TreeNode *CPTAddElement(unsigned char *ipdata, unsigned int ip_bitmask, CPTTree
if ((node->count -1) == 0) { if ((node->count -1) == 0) {
node->netmasks[0] = netmask; node->netmasks[0] = netmask;
free(prefix);
return new_node; return new_node;
} }
@ -449,8 +452,10 @@ TreeNode *CPTAddElement(unsigned char *ipdata, unsigned int ip_bitmask, CPTTree
new_node = CPTCreateNode(); new_node = CPTCreateNode();
if(new_node == NULL) if(new_node == NULL) {
free(prefix);
return NULL; return NULL;
}
new_node->prefix = prefix; new_node->prefix = prefix;
new_node->bit = prefix->bitlen; new_node->bit = prefix->bitlen;