From: Philippe Antoine Date: Mon, 11 Apr 2022 19:29:33 +0000 (+0200) Subject: mqtt: fix consumed bytes computation for truncated msg X-Git-Tag: suricata-7.0.0-beta1~737 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F7253%2Fhead;p=thirdparty%2Fsuricata.git mqtt: fix consumed bytes computation for truncated msg Ticket: 5268 --- diff --git a/rust/src/mqtt/mqtt.rs b/rust/src/mqtt/mqtt.rs index 0881efa873..2644612800 100644 --- a/rust/src/mqtt/mqtt.rs +++ b/rust/src/mqtt/mqtt.rs @@ -438,7 +438,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)) => { @@ -450,17 +449,18 @@ impl MQTTState { 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; } @@ -512,7 +512,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)) => { @@ -524,18 +523,19 @@ impl MQTTState { 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; }