From f3a6d150340169b47ed45b157fc948a1fb9c6c53 Mon Sep 17 00:00:00 2001 From: Philippe Antoine Date: Mon, 11 Apr 2022 21:29:33 +0200 Subject: [PATCH] mqtt: fix consumed bytes computation for truncated msg Ticket: 5268 (cherry picked from commit 3b13008c1b6b994df0ae3f702c24780fd253ec32) --- rust/src/mqtt/mqtt.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/rust/src/mqtt/mqtt.rs b/rust/src/mqtt/mqtt.rs index 737ec6beaf..797d9b1f4e 100644 --- a/rust/src/mqtt/mqtt.rs +++ b/rust/src/mqtt/mqtt.rs @@ -432,7 +432,6 @@ impl MQTTState { while current.len() > 0 { - let mut skipped = false; SCLogDebug!("request: handling {}", current.len()); match parse_message(current, self.protocol_version, self.max_msg_len) { Ok((rem, msg)) => { @@ -440,17 +439,18 @@ impl MQTTState { if let MQTTOperation::TRUNCATED(ref trunc) = msg.op { SCLogDebug!("found truncated with skipped {} current len {}", trunc.skipped_length, current.len()); if trunc.skipped_length >= current.len() { - skipped = true; self.skip_request = trunc.skipped_length - current.len(); + self.handle_msg(msg, true); + return AppLayerResult::ok(); } else { + consumed += trunc.skipped_length; current = ¤t[trunc.skipped_length..]; + self.handle_msg(msg, true); self.skip_request = 0; + continue; } } self.handle_msg(msg, false); - if skipped { - return AppLayerResult::ok(); - } consumed += current.len() - rem.len(); current = rem; } @@ -489,7 +489,6 @@ impl MQTTState { } while current.len() > 0 { - let mut skipped = false; SCLogDebug!("response: handling {}", current.len()); match parse_message(current, self.protocol_version, self.max_msg_len as usize) { Ok((rem, msg)) => { @@ -497,18 +496,19 @@ impl MQTTState { if let MQTTOperation::TRUNCATED(ref trunc) = msg.op { SCLogDebug!("found truncated with skipped {} current len {}", trunc.skipped_length, current.len()); if trunc.skipped_length >= current.len() { - skipped = true; self.skip_response = trunc.skipped_length - current.len(); + self.handle_msg(msg, true); + SCLogDebug!("skip_response now {}", self.skip_response); + return AppLayerResult::ok(); } else { + consumed += trunc.skipped_length; current = ¤t[trunc.skipped_length..]; + self.handle_msg(msg, true); self.skip_response = 0; + continue; } - SCLogDebug!("skip_response now {}", self.skip_response); } self.handle_msg(msg, true); - if skipped { - return AppLayerResult::ok(); - } consumed += current.len() - rem.len(); current = rem; } -- 2.47.2