]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
smtp: simplify preprocess loop
authorVictor Julien <vjulien@oisf.net>
Sat, 4 Jun 2022 06:49:25 +0000 (08:49 +0200)
committerVictor Julien <vjulien@oisf.net>
Sat, 18 Jun 2022 14:16:30 +0000 (16:16 +0200)
(cherry picked from commit 3a631085bb853d6d42c5218235cd9a581a3e106c)

src/app-layer-smtp.c

index 146ab7bb9c0547cb6cf553affc8a2c3c9813279a..d4851ab9fec9b853705696852b7d05945112886e 100644 (file)
@@ -1416,10 +1416,11 @@ static int SMTPProcessRequest(SMTPState *state, Flow *f,
 
 static int SMTPPreProcessCommands(SMTPState *state, Flow *f, AppLayerParserState *pstate)
 {
+    DEBUG_VALIDATE_BUG_ON((state->parser_state & SMTP_PARSER_STATE_COMMAND_DATA_MODE) == 0);
+
     bool line_complete = false;
     int32_t input_len = state->input_len;
-    for (int32_t i = 0;
-            i < input_len && (state->parser_state & SMTP_PARSER_STATE_COMMAND_DATA_MODE); i++) {
+    for (int32_t i = 0; i < input_len; i++) {
         if (state->input[i] == 0x0d) {
             if (i < input_len - 1 && state->input[i + 1] == 0x0a) {
                 i++;
@@ -1454,6 +1455,10 @@ static int SMTPPreProcessCommands(SMTPState *state, Flow *f, AppLayerParserState
             }
             line_complete = false;
             state->current_line_delimiter_len = 0;
+
+            /* bail if `SMTPProcessRequest` ended the data mode */
+            if ((state->parser_state & SMTP_PARSER_STATE_COMMAND_DATA_MODE) == 0)
+                break;
         }
     }
     return 0;