From: Victor Julien Date: Fri, 17 Mar 2023 17:11:41 +0000 (+0100) Subject: detect: add util funcs to get first and last sigmatch for buffer X-Git-Tag: suricata-7.0.0-rc2~424 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0b6ebd13ee5b5dd8c98dd34c548cfe6af950f3d6;p=thirdparty%2Fsuricata.git detect: add util funcs to get first and last sigmatch for buffer --- diff --git a/src/detect-engine.c b/src/detect-engine.c index 93c94f7918..5913400eaf 100644 --- a/src/detect-engine.c +++ b/src/detect-engine.c @@ -1290,6 +1290,33 @@ bool DetectEngineBufferRunValidateCallback( return true; } +SigMatch *DetectBufferGetFirstSigMatch(const Signature *s, const uint32_t buf_id) +{ + const uint32_t nlists = s->init_data->smlists_array_size; + if (buf_id < nlists) { + return s->init_data->smlists[buf_id]; + } + return NULL; +} + +SigMatch *DetectBufferGetLastSigMatch(const Signature *s, const uint32_t buf_id) +{ + const uint32_t nlists = s->init_data->smlists_array_size; + if (buf_id < nlists) { + return s->init_data->smlists_tail[buf_id]; + } + return NULL; +} + +bool DetectBufferIsPresent(const Signature *s, const uint32_t buf_id) +{ + const uint32_t nlists = s->init_data->smlists_array_size; + if (buf_id < nlists) { + return s->init_data->smlists_tail[buf_id] != NULL; + } + return false; +} + int DetectBufferSetActiveList(Signature *s, const int list) { BUG_ON(s->init_data == NULL); diff --git a/src/detect-engine.h b/src/detect-engine.h index 2980f0dac6..7a790db749 100644 --- a/src/detect-engine.h +++ b/src/detect-engine.h @@ -186,6 +186,9 @@ int DetectEngineMustParseMetadata(void); int WARN_UNUSED DetectBufferSetActiveList(Signature *s, const int list); int DetectBufferGetActiveList(DetectEngineCtx *de_ctx, Signature *s); +SigMatch *DetectBufferGetFirstSigMatch(const Signature *s, const uint32_t buf_id); +SigMatch *DetectBufferGetLastSigMatch(const Signature *s, const uint32_t buf_id); +bool DetectBufferIsPresent(const Signature *s, const uint32_t buf_id); DetectEngineThreadCtx *DetectEngineThreadCtxInitForReload( ThreadVars *tv, DetectEngineCtx *new_de_ctx, int mt);