From 69d38a3222415dc2c7fc2ea2686f4c1c9b0dd2d4 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Mon, 12 Oct 2015 10:41:57 +0200 Subject: [PATCH] mpm: ac-bs use internal pattern id tracking --- src/util-mpm-ac-bs.c | 6 ++++-- src/util-mpm-ac-bs.h | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/util-mpm-ac-bs.c b/src/util-mpm-ac-bs.c index 23c37e8d03..ade031a4f3 100644 --- a/src/util-mpm-ac-bs.c +++ b/src/util-mpm-ac-bs.c @@ -1239,6 +1239,8 @@ int SCACBSPreparePatterns(MpmCtx *mpm_ctx) mpm_ctx->memory_cnt--; mpm_ctx->memory_size -= (mpm_ctx->pattern_cnt * sizeof(SCACBSPattern *)); + ctx->pattern_id_bitarray_size = (ctx->max_pat_id / 8) + 1; + return 0; error: @@ -1434,8 +1436,8 @@ uint32_t SCACBSSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx, /* \todo Change it for stateful MPM. Supply the state using mpm_thread_ctx */ SCACBSPatternList *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_BS_STATE_TYPE_U16 state = 0; diff --git a/src/util-mpm-ac-bs.h b/src/util-mpm-ac-bs.h index ce9c59fc5c..42d254c585 100644 --- a/src/util-mpm-ac-bs.h +++ b/src/util-mpm-ac-bs.h @@ -71,6 +71,9 @@ typedef struct SCACBSCtx_ { /* no of states used by ac */ uint32_t state_count; + + uint16_t pattern_id_bitarray_size; + /* the all important memory hungry state_table */ SC_AC_BS_STATE_TYPE_U16 (*state_table_u16)[256]; /* the all important memory hungry state_table */ -- 2.47.2