]> git.ipfire.org Git - people/ms/suricata.git/commitdiff
dce_opnum: improve memory handling on parsing error
authorVictor Julien <victor@inliniac.net>
Thu, 18 Jun 2015 13:46:28 +0000 (15:46 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 18 Jun 2015 15:19:45 +0000 (17:19 +0200)
src/detect-dce-opnum.c

index 3c6e6aad67f0e6524b7b7e99cc7d794b668861e3..0885666374eb50af3cf9dd3dbdfb41a3fc826d13 100644 (file)
@@ -182,6 +182,13 @@ static inline DetectDceOpnumData *DetectDceOpnumArgParse(const char *arg)
         dor = DetectDceOpnumAllocDetectDceOpnumRange();
         if (dor == NULL)
             goto error;
+        if (prev_dor == NULL) {
+            prev_dor = dor;
+            dod->range = dor;
+        } else {
+            prev_dor->next = dor;
+            prev_dor = dor;
+        }
 
         if ((hyphen_token = index(dup_str_temp, '-')) != NULL) {
             hyphen_token[0] = '\0';
@@ -199,20 +206,17 @@ static inline DetectDceOpnumData *DetectDceOpnumArgParse(const char *arg)
         if (dor->range1 > DCE_OPNUM_RANGE_MAX)
             goto error;
 
-        if (prev_dor == NULL) {
-            prev_dor = dor;
-            dod->range = dor;
-        } else {
-            prev_dor->next = dor;
-            prev_dor = dor;
-        }
-
         dup_str_temp = dup_str;
     }
 
     dor = DetectDceOpnumAllocDetectDceOpnumRange();
     if (dor == NULL)
         goto error;
+    if (prev_dor == NULL) {
+        dod->range = dor;
+    } else {
+        prev_dor->next = dor;
+    }
 
     if ( (hyphen_token = index(dup_str, '-')) != NULL) {
         hyphen_token[0] = '\0';
@@ -230,12 +234,6 @@ static inline DetectDceOpnumData *DetectDceOpnumArgParse(const char *arg)
     if (dor->range1 > DCE_OPNUM_RANGE_MAX)
         goto error;
 
-    if (prev_dor == NULL) {
-        dod->range = dor;
-    } else {
-        prev_dor->next = dor;
-    }
-
     if (dup_str_head != NULL)
         SCFree(dup_str_head);