Fix a crash parsing malformed TCP options.
Found via cargo-fuzz.
This commit is contained in:
parent
c09e96a657
commit
6842d7013d
|
@ -514,8 +514,7 @@ impl<'a> TcpOption<'a> {
|
|||
}
|
||||
kind => {
|
||||
length = *buffer.get(1).ok_or(Error::Truncated)? as usize;
|
||||
if buffer.len() < length { return Err(Error::Truncated) }
|
||||
let data = &buffer[2..length];
|
||||
let data = buffer.get(2..length).ok_or(Error::Truncated)?;
|
||||
match (kind, length) {
|
||||
(field::OPT_END, _) |
|
||||
(field::OPT_NOP, _) =>
|
||||
|
@ -931,6 +930,8 @@ mod test {
|
|||
Err(Error::Truncated));
|
||||
assert_eq!(TcpOption::parse(&[0xc, 0x05, 0x01, 0x02]),
|
||||
Err(Error::Truncated));
|
||||
assert_eq!(TcpOption::parse(&[0xc, 0x01]),
|
||||
Err(Error::Truncated));
|
||||
assert_eq!(TcpOption::parse(&[0x2, 0x02]),
|
||||
Err(Error::Malformed));
|
||||
assert_eq!(TcpOption::parse(&[0x3, 0x02]),
|
||||
|
|
Loading…
Reference in New Issue