From: Eric Leblond Date: Tue, 27 May 2025 20:08:27 +0000 (+0200) Subject: datajson: fix potential leak in error handling X-Git-Tag: suricata-8.0.0-rc1~44 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e7bd924326315fedb65e495b37f1d567b54e3c4;p=thirdparty%2Fsuricata.git datajson: fix potential leak in error handling --- diff --git a/src/datasets-context-json.c b/src/datasets-context-json.c index f848e3f988..9249dd6bfd 100644 --- a/src/datasets-context-json.c +++ b/src/datasets-context-json.c @@ -367,6 +367,7 @@ static uint32_t DatajsonAddStringElement(Dataset *set, json_t *value, char *json int add_ret = DatajsonAdd(set, (const uint8_t *)val, strlen(val), &elt); if (add_ret < 0) { FatalErrorOnInit("datajson data add failed %s/%s", set->name, set->load); + SCFree(elt.value); return 0; } if (add_ret == 0) { @@ -429,6 +430,7 @@ static uint32_t DatajsonAddMd5Element(Dataset *set, json_t *value, char *json_ke int add_ret = DatajsonAdd(set, (const uint8_t *)hash, SC_MD5_LEN, &elt); if (add_ret < 0) { FatalErrorOnInit("datajson data add failed %s/%s", set->name, set->load); + SCFree(elt.value); return 0; } if (add_ret == 0) { @@ -491,6 +493,7 @@ static uint32_t DatajsonAddSha256Element(Dataset *set, json_t *value, char *json int add_ret = DatajsonAdd(set, (const uint8_t *)hash, SC_SHA256_LEN, &elt); if (add_ret < 0) { FatalErrorOnInit("datajson data add failed %s/%s", set->name, set->load); + SCFree(elt.value); return 0; } if (add_ret == 0) { @@ -548,6 +551,7 @@ static uint32_t DatajsonAddIpv4Element(Dataset *set, json_t *value, char *json_k int add_ret = DatajsonAdd(set, (const uint8_t *)&in.s_addr, SC_IPV4_LEN, &elt); if (add_ret < 0) { FatalErrorOnInit("datajson data add failed %s/%s", set->name, set->load); + SCFree(elt.value); return 0; } @@ -607,6 +611,7 @@ static uint32_t DatajsonAddIPv6Element(Dataset *set, json_t *value, char *json_k int add_ret = DatajsonAdd(set, (const uint8_t *)&in6.s6_addr, SC_IPV6_LEN, &elt); if (add_ret < 0) { FatalErrorOnInit("datajson data add failed %s/%s", set->name, set->load); + SCFree(elt.value); return 0; } if (add_ret == 0) {