SCLogConfig("building signature grouping structure, stage 1: "
"preprocessing rules... complete");
}
- DetectFlowbitsAnalyze(de_ctx);
+
+ if (DetectFlowbitsAnalyze(de_ctx) != 0)
+ goto error;
return 0;
struct FBAnalyze *array, uint32_t elements);
#endif
-void DetectFlowbitsAnalyze(DetectEngineCtx *de_ctx)
+int DetectFlowbitsAnalyze(DetectEngineCtx *de_ctx)
{
const uint32_t max_fb_id = de_ctx->max_fb_id;
if (max_fb_id == 0)
- return;
+ return 0;
#define MAX_SIDS 8
uint32_t array_size = max_fb_id + 1;
- struct FBAnalyze array[array_size];
- memset(&array, 0, array_size * sizeof(struct FBAnalyze));
+ struct FBAnalyze *array = SCCalloc(array_size, sizeof(struct FBAnalyze));
+
+ if (array == NULL) {
+ SCLogError(SC_ERR_MEM_ALLOC, "Unable to allocate flowbit analyze array");
+ return -1;
+ }
SCLogDebug("fb analyzer array size: %"PRIu64,
(uint64_t)(array_size * sizeof(struct FBAnalyze)));
SCFree(array[i].isnotset_sids);
SCFree(array[i].toggle_sids);
}
+ SCFree(array);
+
+ return 0;
}
#ifdef PROFILING
void RuleMatchCandidateTxArrayInit(DetectEngineThreadCtx *det_ctx, uint32_t size);
void RuleMatchCandidateTxArrayFree(DetectEngineThreadCtx *det_ctx);
-void DetectFlowbitsAnalyze(DetectEngineCtx *de_ctx);
+int DetectFlowbitsAnalyze(DetectEngineCtx *de_ctx);
int DetectMetadataHashInit(DetectEngineCtx *de_ctx);
void DetectMetadataHashFree(DetectEngineCtx *de_ctx);