]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
mpm: ac use internal pattern id tracking
authorVictor Julien <victor@inliniac.net>
Mon, 12 Oct 2015 08:39:16 +0000 (10:39 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 5 Apr 2016 07:30:10 +0000 (09:30 +0200)
src/util-mpm-ac.c
src/util-mpm-ac.h

index d5b535f51a413c0f0a1120dc8ffde9b5a4024273..85acc77b5f5af59ca74ebf5be89f4ad6576d0ec9 100644 (file)
@@ -990,7 +990,7 @@ static void SCACPrintDeltaTable(MpmCtx *mpm_ctx)
  *
  * \param mpm_ctx Pointer to the mpm context.
  */
-static inline void SCACPrepareStateTable(MpmCtx *mpm_ctx)
+static void SCACPrepareStateTable(MpmCtx *mpm_ctx)
 {
     SCACCtx *ctx = (SCACCtx *)mpm_ctx->ctx;
 
@@ -1131,6 +1131,8 @@ int SCACPreparePatterns(MpmCtx *mpm_ctx)
     mpm_ctx->memory_cnt--;
     mpm_ctx->memory_size -= (mpm_ctx->pattern_cnt * sizeof(SCACPattern *));
 
+    ctx->pattern_id_bitarray_size = (ctx->max_pat_id / 8) + 1;
+
     return 0;
 
 error:
@@ -1314,8 +1316,8 @@ uint32_t SCACSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
     /* \todo Change it for stateful MPM.  Supply the state using mpm_thread_ctx */
     SCACPatternList *pid_pat_list = ctx->pid_pat_list;
 
-    uint8_t bitarray[pmq->pattern_id_bitarray_size];
-    memset(bitarray, 0, pmq->pattern_id_bitarray_size);
+    uint8_t bitarray[ctx->pattern_id_bitarray_size];
+    memset(bitarray, 0, ctx->pattern_id_bitarray_size);
 
     if (ctx->state_count < 32767) {
         register SC_AC_STATE_TYPE_U16 state = 0;
index ac6f46467775888723e95e6c3f7075d426e622d5..394ad6781f2d82e5be27392528721bda1ff47a35 100644 (file)
@@ -84,6 +84,9 @@ typedef struct SCACCtx_ {
 
     /* no of states used by ac */
     uint32_t state_count;
+
+    uint32_t pattern_id_bitarray_size;
+
     /* the all important memory hungry state_table */
     SC_AC_STATE_TYPE_U16 (*state_table_u16)[256];
     /* the all important memory hungry state_table */