diff --git a/examples/lib/custom/main.c b/examples/lib/custom/main.c index b11b6e01d7e6..a689e454948f 100644 --- a/examples/lib/custom/main.c +++ b/examples/lib/custom/main.c @@ -253,7 +253,11 @@ int main(int argc, char **argv) * ThreadVars will be ready. */ SuricataInit(); - SCDetectEngineRegisterRateFilterCallback(RateFilterCallback, NULL); + if (DetectEngineEnabled()) { + SCDetectEngineRegisterRateFilterCallback(RateFilterCallback, NULL); + } else { + SCLogWarning("detection engine not enabled, rate filter callback not registered"); + } /* Spawn our worker threads. */ pthread_t worker; diff --git a/examples/lib/live/main.c b/examples/lib/live/main.c index 572a7dde241a..74ce13510503 100644 --- a/examples/lib/live/main.c +++ b/examples/lib/live/main.c @@ -306,7 +306,11 @@ int main(int argc, char **argv) * ThreadVars will be ready. */ SuricataInit(); - SCDetectEngineRegisterRateFilterCallback(RateFilterCallback, NULL); + if (DetectEngineEnabled()) { + SCDetectEngineRegisterRateFilterCallback(RateFilterCallback, NULL); + } else { + SCLogWarning("detection engine not enabled, rate filter callback not registered"); + } /* Spawn our worker threads, one for each interface. */ pthread_t workers[MAX_INTERFACES]; diff --git a/src/detect-engine.c b/src/detect-engine.c index c526154027b2..cfd2c6716376 100644 --- a/src/detect-engine.c +++ b/src/detect-engine.c @@ -5206,6 +5206,10 @@ void DetectLowerSetupCallback( void SCDetectEngineRegisterRateFilterCallback(SCDetectRateFilterFunc fn, void *arg) { DetectEngineCtx *de_ctx = DetectEngineGetCurrent(); + if (de_ctx == NULL) { + SCLogError("no detection engine available for rate filter callback registration"); + return; + } de_ctx->RateFilterCallback = fn; de_ctx->rate_filter_callback_arg = arg; DetectEngineDeReference(&de_ctx);