From ef936acdba0cda1da09ff4b7ea35281bd8f18429 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 4 Aug 2023 14:18:20 +0200 Subject: [PATCH] detect/content: cleanup nocase conversion --- src/detect-content.c | 23 +++++++++++++++++++++++ src/detect-content.h | 1 + src/detect-nocase.c | 24 +----------------------- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/detect-content.c b/src/detect-content.c index 6026cf2956..5bbe9e9b3c 100644 --- a/src/detect-content.c +++ b/src/detect-content.c @@ -754,6 +754,29 @@ void DetectContentPatternPrettyPrint(const DetectContentData *cd, char *str, siz } } +int DetectContentConvertToNocase(DetectEngineCtx *de_ctx, DetectContentData *cd) +{ + if (cd->flags & DETECT_CONTENT_NOCASE) { + SCLogError("can't use multiple nocase modifiers with the same content"); + return -1; + } + + /* for consistency in later use (e.g. by MPM construction and hashing), + * coerce the content string to lower-case. */ + for (uint8_t *c = cd->content; c < cd->content + cd->content_len; c++) { + *c = u8_tolower(*c); + } + + cd->flags |= DETECT_CONTENT_NOCASE; + /* Recreate the context with nocase chars */ + SpmDestroyCtx(cd->spm_ctx); + cd->spm_ctx = SpmInitCtx(cd->content, cd->content_len, 1, de_ctx->spm_global_thread_ctx); + if (cd->spm_ctx == NULL) { + return -1; + } + return 0; +} + #ifdef UNITTESTS /* UNITTESTS */ #include "detect-engine-alert.h" #include "packet.h" diff --git a/src/detect-content.h b/src/detect-content.h index cf56118b05..bc47562a96 100644 --- a/src/detect-content.h +++ b/src/detect-content.h @@ -132,5 +132,6 @@ void DetectContentPropagateLimits(Signature *s); void DetectContentPatternPrettyPrint(const DetectContentData *cd, char *str, size_t str_len); void SigParseRequiredContentSize( const Signature *s, const int max, const SigMatch *sm, int *len, int *offset); +int DetectContentConvertToNocase(DetectEngineCtx *de_ctx, DetectContentData *cd); #endif /* __DETECT_CONTENT_H__ */ diff --git a/src/detect-nocase.c b/src/detect-nocase.c index 34e60507e2..deed7b2513 100644 --- a/src/detect-nocase.c +++ b/src/detect-nocase.c @@ -74,30 +74,8 @@ static int DetectNocaseSetup (DetectEngineCtx *de_ctx, Signature *s, const char goto end; } - /* verify other conditions. */ DetectContentData *cd = (DetectContentData *)pm->ctx; - - if (cd->flags & DETECT_CONTENT_NOCASE) { - SCLogError("can't use multiple nocase modifiers with the same content"); - goto end; - } - - /* for consistency in later use (e.g. by MPM construction and hashing), - * coerce the content string to lower-case. */ - for (uint8_t *c = cd->content; c < cd->content + cd->content_len; c++) { - *c = u8_tolower(*c); - } - - cd->flags |= DETECT_CONTENT_NOCASE; - /* Recreate the context with nocase chars */ - SpmDestroyCtx(cd->spm_ctx); - cd->spm_ctx = SpmInitCtx(cd->content, cd->content_len, 1, - de_ctx->spm_global_thread_ctx); - if (cd->spm_ctx == NULL) { - goto end; - } - - ret = 0; + ret = DetectContentConvertToNocase(de_ctx, cd); end: SCReturnInt(ret); }