From: Victor Julien Date: Sat, 4 Jun 2022 06:49:25 +0000 (+0200) Subject: smtp: simplify preprocess loop X-Git-Tag: suricata-6.0.6~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35145c1c6f9b8d17a90ef396bde8f178c4f53017;p=thirdparty%2Fsuricata.git smtp: simplify preprocess loop (cherry picked from commit 3a631085bb853d6d42c5218235cd9a581a3e106c) --- diff --git a/src/app-layer-smtp.c b/src/app-layer-smtp.c index 6a9210adb6..700122cf8d 100644 --- a/src/app-layer-smtp.c +++ b/src/app-layer-smtp.c @@ -1204,10 +1204,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++; @@ -1238,12 +1239,16 @@ static int SMTPPreProcessCommands(SMTPState *state, Flow *f, AppLayerParserState state->current_line_len = current_line_consumed - state->current_line_delimiter_len; state->consumed = total_consumed; state->input_len -= current_line_consumed; - BUG_ON(state->consumed + state->input_len != state->orig_input_len); + DEBUG_VALIDATE_BUG_ON(state->consumed + state->input_len != state->orig_input_len); if (SMTPProcessRequest(state, f, pstate) == -1) { return -1; } 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;