smtp: return on line completion

Problem:
If we receive a long line w/o LF, we cap it to 4k bytes and wait until a
line with LF comes in order to consider the previous line complete. Any
data post the 4k bytes is discarded. Currently, if a line with LF comes
in after a long line, we reset all the parameters used for processing it
like the line.len and line.delim_len but we still make the call to
SMTPProcessRequest fn without even the need to process anything. Since
such a line (with len and delim_len set to 0) should not reach mime
decoder, a debug assertion triggers there in this case.

Fix:
Make sure to return early as the line has to be skipped and not
processed at all.

Bug 6019
pull/8815/head
Shivani Bhardwaj 2 years ago committed by Victor Julien
parent 51aef3c230
commit c0067a5fff

@ -1139,6 +1139,13 @@ static int SMTPProcessRequest(SMTPState *state, Flow *f, AppLayerParserState *ps
SCEnter();
SMTPTransaction *tx = state->curr_tx;
/* If current input is to be discarded because it completes a long line,
* line's length and delimeter len are reset to 0. Skip processing this line.
* This line is only to get us out of the state where we should discard any
* data till LF. */
if (line->len == 0 && line->delim_len == 0) {
return 0;
}
if (state->curr_tx == NULL || (state->curr_tx->done && !NoNewTx(state, line))) {
tx = SMTPTransactionCreate();
if (tx == NULL)

Loading…
Cancel
Save