]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
smtp: exit data mode if data command was rejected
authorPhilippe Antoine <pantoine@oisf.net>
Sat, 30 Mar 2024 14:05:26 +0000 (15:05 +0100)
committerVictor Julien <victor@inliniac.net>
Thu, 16 May 2024 17:58:33 +0000 (19:58 +0200)
And the server was advertising pipelining.

Ticket: 6906

src/app-layer-smtp.c

index 5fc59cfa7f6287e8b3c455d2d2f583274b58a474..5a4fc0c7a2c90de5c383dc9649c18f5b86b3b0e9 100644 (file)
@@ -997,6 +997,10 @@ static int SMTPProcessReply(SMTPState *state, Flow *f, AppLayerParserState *psta
             state->parser_state |= SMTP_PARSER_STATE_COMMAND_DATA_MODE;
         } else {
             /* decoder event */
+            if (state->parser_state & SMTP_PARSER_STATE_PIPELINING_SERVER) {
+                // reset data mode if we had entered it prematurely
+                state->parser_state &= ~SMTP_PARSER_STATE_COMMAND_DATA_MODE;
+            }
             SMTPSetEvent(state, SMTP_DECODER_EVENT_DATA_COMMAND_REJECTED);
         }
     } else if (IsReplyToCommand(state, SMTP_COMMAND_RSET)) {