Skip to content

Commit ed2c376

Browse files
committed
Fix a crash parsing a truncated TCP packet with options.
Found via cargo-fuzz.
1 parent 3f43be8 commit ed2c376

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/wire/tcp.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,12 @@ impl<T: AsRef<[u8]>> Packet<T> {
123123
if len < field::URGENT.end {
124124
Err(Error::Truncated)
125125
} else {
126-
Ok(())
126+
let header_len = self.header_len() as usize;
127+
if len < header_len {
128+
Err(Error::Truncated)
129+
} else {
130+
Ok(())
131+
}
127132
}
128133
}
129134

@@ -862,6 +867,12 @@ mod test {
862867
assert_eq!(&packet.into_inner()[..], &PACKET_BYTES[..]);
863868
}
864869

870+
#[test]
871+
fn test_truncated() {
872+
let packet = Packet::new(&PACKET_BYTES[..23]);
873+
assert_eq!(packet.check_len(), Err(Error::Truncated));
874+
}
875+
865876
static SYN_PACKET_BYTES: [u8; 24] =
866877
[0xbf, 0x00, 0x00, 0x50,
867878
0x01, 0x23, 0x45, 0x67,

0 commit comments

Comments
 (0)