]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
cppcheck/detect: Address cppcheck memory leak
authorJeff Lucovsky <jlucovsky@oisf.net>
Sat, 25 Nov 2023 14:20:43 +0000 (09:20 -0500)
committerVictor Julien <victor@inliniac.net>
Wed, 13 Dec 2023 05:59:29 +0000 (06:59 +0100)
Issue: 6527

Ensure that the `map->string` memory isn't leaked following an error
return from `HashListTableAdd`

src/detect-engine-address.c

index 7819969e6ef37fbbda4c2cf99b8806e061f54487..c30ebd6878dcad55101671b934c8ce76ccb693b4 100644 (file)
@@ -1362,23 +1362,28 @@ void DetectAddressMapFree(DetectEngineCtx *de_ctx)
     return;
 }
 
-static int DetectAddressMapAdd(DetectEngineCtx *de_ctx, const char *string,
-                        DetectAddressHead *address, bool contains_negation)
+static bool DetectAddressMapAdd(DetectEngineCtx *de_ctx, const char *string,
+        DetectAddressHead *address, bool contains_negation)
 {
     DetectAddressMap *map = SCCalloc(1, sizeof(*map));
     if (map == NULL)
-        return -1;
+        return false;
 
     map->string = SCStrdup(string);
     if (map->string == NULL) {
         SCFree(map);
-        return -1;
+        return false;
     }
     map->address = address;
     map->contains_negation = contains_negation;
 
-    BUG_ON(HashListTableAdd(de_ctx->address_table, (void *)map, 0) != 0);
-    return 0;
+    if (HashListTableAdd(de_ctx->address_table, (void *)map, 0) != 0) {
+        SCFree(map->string);
+        SCFree(map);
+        return false;
+    }
+
+    return true;
 }
 
 static const DetectAddressMap *DetectAddressMapLookup(DetectEngineCtx *de_ctx,
@@ -1471,8 +1476,11 @@ const DetectAddressHead *DetectParseAddress(DetectEngineCtx *de_ctx,
         *contains_negation = false;
     }
 
-    DetectAddressMapAdd((DetectEngineCtx *)de_ctx, string, head,
-            *contains_negation);
+    if (!DetectAddressMapAdd((DetectEngineCtx *)de_ctx, string, head, *contains_negation)) {
+        DetectAddressHeadFree(head);
+        return NULL;
+    }
+
     return head;
 }