]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
mpm: allocate StateQueue on the heap for ks
authorPhilippe Antoine <pantoine@oisf.net>
Tue, 17 Jun 2025 08:35:55 +0000 (10:35 +0200)
committerVictor Julien <victor@inliniac.net>
Wed, 18 Jun 2025 16:22:58 +0000 (18:22 +0200)
Completes commit 92fce2fdc069324e6060ce046ca80da6a351573c

Ticket: 6264

src/util-mpm-ac-ks.c

index 5e73dfd533b6ea34629f12e53dd83f13cb2676f8..c13ae393b62b9c7348d1015f65a37b390492b8a9 100644 (file)
@@ -401,7 +401,7 @@ static void SCACTileCreateGotoTable(MpmCtx *mpm_ctx)
     }
 }
 
-static inline int SCACTileStateQueueIsEmpty(StateQueue *q)
+static inline int SCACStateQueueIsEmpty(StateQueue *q)
 {
     if (q->top == q->bot)
         return 1;
@@ -409,7 +409,7 @@ static inline int SCACTileStateQueueIsEmpty(StateQueue *q)
         return 0;
 }
 
-static inline void SCACTileEnqueue(StateQueue *q, int32_t state)
+static inline void SCACEnqueue(StateQueue *q, int32_t state)
 {
     int i = 0;
 
@@ -430,7 +430,7 @@ static inline void SCACTileEnqueue(StateQueue *q, int32_t state)
     }
 }
 
-static inline int32_t SCACTileDequeue(StateQueue *q)
+static inline int32_t SCACDequeue(StateQueue *q)
 {
     if (q->bot == STATE_QUEUE_CONTAINER_SIZE)
         q->bot = 0;
@@ -505,8 +505,10 @@ static void SCACTileCreateFailureTable(MpmCtx *mpm_ctx)
     int32_t state = 0;
     int32_t r_state = 0;
 
-    StateQueue q;
-    memset(&q, 0, sizeof(StateQueue));
+    StateQueue *q = SCCalloc(1, sizeof(StateQueue));
+    if (q == NULL) {
+        FatalError("Error allocating memory");
+    }
 
     /* Allocate space for the failure table.  A failure entry in the table for
      * every state(SCACTileCtx->state_count) */
@@ -521,19 +523,19 @@ static void SCACTileCreateFailureTable(MpmCtx *mpm_ctx)
     for (aa = 0; aa < ctx->alphabet_size; aa++) {
         int32_t temp_state = ctx->goto_table[0][aa];
         if (temp_state != 0) {
-            SCACTileEnqueue(&q, temp_state);
+            SCACEnqueue(q, temp_state);
             ctx->failure_table[temp_state] = 0;
         }
     }
 
-    while (!SCACTileStateQueueIsEmpty(&q)) {
+    while (!SCACStateQueueIsEmpty(q)) {
         /* pick up every state from the queue and add failure transitions */
-        r_state = SCACTileDequeue(&q);
+        r_state = SCACDequeue(q);
         for (aa = 0; aa < ctx->alphabet_size; aa++) {
             int32_t temp_state = ctx->goto_table[r_state][aa];
             if (temp_state == SC_AC_TILE_FAIL)
                 continue;
-            SCACTileEnqueue(&q, temp_state);
+            SCACEnqueue(q, temp_state);
             state = ctx->failure_table[r_state];
 
             while(ctx->goto_table[state][aa] == SC_AC_TILE_FAIL)
@@ -543,6 +545,7 @@ static void SCACTileCreateFailureTable(MpmCtx *mpm_ctx)
                                      mpm_ctx);
         }
     }
+    SCFree(q);
 }
 
 /*
@@ -676,28 +679,31 @@ static inline void SCACTileCreateDeltaTable(MpmCtx *mpm_ctx)
         ctx->alphabet_storage = 256; /* Change? */
     }
 
-    StateQueue q;
-    memset(&q, 0, sizeof(StateQueue));
+    StateQueue *q = SCCalloc(1, sizeof(StateQueue));
+    if (q == NULL) {
+        FatalError("Error allocating memory");
+    }
 
     for (aa = 0; aa < ctx->alphabet_size; aa++) {
         int temp_state = ctx->goto_table[0][aa];
         if (temp_state != 0)
-            SCACTileEnqueue(&q, temp_state);
+            SCACEnqueue(q, temp_state);
     }
 
-    while (!SCACTileStateQueueIsEmpty(&q)) {
-        r_state = SCACTileDequeue(&q);
+    while (!SCACStateQueueIsEmpty(q)) {
+        r_state = SCACDequeue(q);
 
         for (aa = 0; aa < ctx->alphabet_size; aa++) {
             int temp_state = ctx->goto_table[r_state][aa];
             if (temp_state != SC_AC_TILE_FAIL) {
-                SCACTileEnqueue(&q, temp_state);
+                SCACEnqueue(q, temp_state);
             } else {
                 int f_state = ctx->failure_table[r_state];
                 ctx->goto_table[r_state][aa] = ctx->goto_table[f_state][aa];
             }
         }
     }
+    SCFree(q);
 }
 
 static void SCACTileClubOutputStatePresenceWithDeltaTable(MpmCtx *mpm_ctx)