]> 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>
Thu, 1 Nov 2018 14:46:10 +0000 (15:46 +0100)
src/detect-bytetest.c

index 4dcb3127fe3b24cb6512e17e23c24005e5158273..8ca14e66b38854410733b6ed8056001b8522a8b0 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;
 
@@ -510,6 +509,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) {
@@ -522,6 +522,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();
@@ -548,6 +549,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;
 }