]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
smtp: check if we have a current transaction
authorPhilippe Antoine <contact@catenacyber.fr>
Tue, 25 Jan 2022 20:10:37 +0000 (21:10 +0100)
committerVictor Julien <vjulien@oisf.net>
Tue, 1 Feb 2022 06:17:38 +0000 (07:17 +0100)
Ticket: 4948

This is not the perfect solution, but it prevents to trigger
the assert, and keep the assert.
A better solution would need to create transaction from
the reponse parsing, in case a later command was buffered and
not answered. But this would not be enough as NoNewTx prevents
the creation of a new transaction for RSET...

src/app-layer-smtp.c

index 2ef8eea6c01109a8390edd6e529dacfc92c7de71..955dfdb9f71a15886236f2cb80fb11dd53426784 100644 (file)
@@ -939,7 +939,7 @@ static int SMTPProcessReply(SMTPState *state, Flow *f,
             SMTPSetEvent(state, SMTP_DECODER_EVENT_DATA_COMMAND_REJECTED);
         }
     } else if (IsReplyToCommand(state, SMTP_COMMAND_RSET)) {
-        if (reply_code == SMTP_REPLY_250 &&
+        if (reply_code == SMTP_REPLY_250 && state->curr_tx &&
                 !(state->parser_state & SMTP_PARSER_STATE_PARSING_MULTILINE_REPLY)) {
             SMTPTransactionComplete(state);
         }