]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
bytetest: don't leak memory in error condition
authorVictor Julien <victor@inliniac.net>
Tue, 23 Oct 2018 11:56:50 +0000 (13:56 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 30 Oct 2018 09:21:34 +0000 (10:21 +0100)
src/detect-bytetest.c

index 5573e786651c761be2d5cc77cb4d8d1279029e7b..28450e1b31d939dbf257891cdad783445abcbbac 100644 (file)
@@ -433,12 +433,11 @@ static int DetectBytetestSetup(DetectEngineCtx *de_ctx, Signature *s, const char
 {
     SigMatch *sm = NULL;
     SigMatch *prev_pm = NULL;
-    DetectBytetestData *data = NULL;
     char *value = NULL;
     char *offset = NULL;
     int ret = -1;
 
-    data = DetectBytetestParse(optstr, &value, &offset);
+    DetectBytetestData *data = DetectBytetestParse(optstr, &value, &offset);
     if (data == NULL)
         goto error;
 
@@ -513,6 +512,7 @@ static int DetectBytetestSetup(DetectEngineCtx *de_ctx, Signature *s, const char
         data->value = ((DetectByteExtractData *)bed_sm->ctx)->local_id;
         data->flags |= DETECT_BYTETEST_VALUE_BE;
         SCFree(value);
+        value = NULL;
     }
 
     if (offset != NULL) {
@@ -525,6 +525,7 @@ static int DetectBytetestSetup(DetectEngineCtx *de_ctx, Signature *s, const char
         data->offset = ((DetectByteExtractData *)bed_sm->ctx)->local_id;
         data->flags |= DETECT_BYTETEST_OFFSET_BE;
         SCFree(offset);
+        offset = NULL;
     }
 
     sm = SigMatchAlloc();
@@ -551,6 +552,10 @@ static int DetectBytetestSetup(DetectEngineCtx *de_ctx, Signature *s, const char
     ret = 0;
     return ret;
  error:
+    if (offset)
+        SCFree(offset);
+    if (value)
+        SCFree(value);
     DetectBytetestFree(data);
     return ret;
 }