From b05addaa823dfbce1a7209865d04c01587fdfa2e Mon Sep 17 00:00:00 2001 From: Jason Ish Date: Wed, 29 Nov 2023 12:57:23 -0600 Subject: [PATCH] detect-parse: parse sid in pre-scan During the pre-scan for "requires", also parse the SID if possible. If the rule fails high level parsing (syntax), the SID will not be parsed. But every keyword other than "sid" and "requires" should expect to be provided with a parsed sid. --- src/detect-parse.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/detect-parse.c b/src/detect-parse.c index 47c1b690a159..3d3d0c918b8c 100644 --- a/src/detect-parse.c +++ b/src/detect-parse.c @@ -902,10 +902,11 @@ static int SigParseOptions(DetectEngineCtx *de_ctx, Signature *s, char *optstr, } optname = optstr; - if (requires) { - if (strcmp(optname, "requires")) { - goto finish; - } + /* Check for options that are only to be processed during the + * first "requires" pass. */ + bool requires_only = strcmp(optname, "requires") == 0 || strcmp(optname, "sid") == 0; + if ((requires && !requires_only) || (!requires && requires_only)) { + goto finish; } /* Call option parsing */ @@ -2139,10 +2140,7 @@ static int SigValidate(DetectEngineCtx *de_ctx, Signature *s) AppLayerHtpNeedFileInspection(); } } - if (s->id == 0) { - SCLogError("Signature missing required value \"sid\"."); - SCReturnInt(0); - } + SCReturnInt(1); } @@ -2183,6 +2181,12 @@ static Signature *SigInitHelper(DetectEngineCtx *de_ctx, const char *sigstr, goto error; } + /* Check for a SID before continuuing. */ + if (sig->id == 0) { + SCLogError("Signature missing required value \"sid\"."); + goto error; + } + /* Now completely parse the rule. */ ret = SigParse(de_ctx, sig, sigstr, dir, &parser, false); BUG_ON(ret == -4);