Browse Source

Fix a crash printing a malformed TCP packet.

Found via cargo-fuzz.
whitequark 7 years ago
parent
commit
2582d1573d
1 changed files with 7 additions and 0 deletions
  1. 7 0
      src/wire/tcp.rs

+ 7 - 0
src/wire/tcp.rs

@@ -729,6 +729,13 @@ impl<'a, T: AsRef<[u8]> + ?Sized> fmt::Display for Packet<&'a T> {
             try!(write!(f, " urg={}", self.urgent_at()))
         }
         try!(write!(f, " len={}", self.payload().len()));
+
+        let header_len = self.header_len() as usize;
+        if header_len < field::URGENT.end {
+            try!(write!(f, " {}", Error::Truncated));
+            return Ok(())
+        }
+
         let mut options = self.options();
         while options.len() > 0 {
             let (next_options, option) =