]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
dcerpc: store consumed_bytes as i32 8419/head
authorPhilippe Antoine <contact@catenacyber.fr>
Sat, 2 Apr 2022 19:16:53 +0000 (21:16 +0200)
committerPhilippe Antoine <pantoine@oisf.net>
Sat, 21 Jan 2023 09:10:18 +0000 (10:10 +0100)
As it can grow bigger than u16

(cherry picked from commit 704bc878ea3f2fcb911d38b6a21aa5a7ee4d2a79)

rust/src/dcerpc/dcerpc.rs

index 07af91ec05f47332ae44bb7e52b96add315ad1c3..b9ee26e81735aa15ee5b06f4cbdca7522df28a7d 100644 (file)
@@ -337,7 +337,7 @@ pub struct DCERPCState {
     pub buffer_tc: Vec<u8>,
     pub pad: u8,
     pub padleft: u16,
-    pub bytes_consumed: u16,
+    pub bytes_consumed: i32,
     pub tx_id: u64,
     pub query_completed: bool,
     pub data_needed_for_dir: u8,
@@ -1020,7 +1020,7 @@ impl DCERPCState {
 
         // Check if header data was complete. In case of EoF or incomplete data, wait for more
         // data else return error
-        if self.bytes_consumed < DCERPC_HDR_LEN && input_len > 0 {
+        if self.bytes_consumed < DCERPC_HDR_LEN.into() && input_len > 0 {
             parsed = self.process_header(&buffer);
             if parsed == -1 {
                 self.extend_buffer(buffer, direction);
@@ -1029,7 +1029,7 @@ impl DCERPCState {
             if parsed == -2 {
                 return AppLayerResult::err();
             }
-            self.bytes_consumed += parsed as u16;
+            self.bytes_consumed += parsed;
         }
 
         let fraglen = self.get_hdr_fraglen().unwrap_or(0);
@@ -1041,7 +1041,7 @@ impl DCERPCState {
         } else {
             self.query_completed = true;
         }
-        parsed = self.bytes_consumed as i32;
+        parsed = self.bytes_consumed;
 
         let current_call_id = self.get_hdr_call_id().unwrap_or(0);
 
@@ -1112,7 +1112,7 @@ impl DCERPCState {
                 return AppLayerResult::err();
             }
         }
-        self.bytes_consumed += retval as u16;
+        self.bytes_consumed += retval;
 
         // If the query has been completed, clean the buffer and reset the direction
         if self.query_completed == true {