|
@@ -208,14 +208,10 @@ impl<T: AsRef<[u8]>> Packet<T> {
|
|
|
/// [set_header_len]: #method.set_header_len
|
|
|
pub fn check_len(&self) -> Result<()> {
|
|
|
let len = self.buffer.as_ref().len();
|
|
|
- if len < field::CHECKSUM.end {
|
|
|
+ if len < self.header_len() {
|
|
|
Err(Error::Truncated)
|
|
|
} else {
|
|
|
- if len < self.header_len() as usize {
|
|
|
- Err(Error::Truncated)
|
|
|
- } else {
|
|
|
- Ok(())
|
|
|
- }
|
|
|
+ Ok(())
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -272,7 +268,7 @@ impl<T: AsRef<[u8]>> Packet<T> {
|
|
|
Message::EchoRequest => field::ECHO_SEQNO.end,
|
|
|
Message::EchoReply => field::ECHO_SEQNO.end,
|
|
|
Message::DstUnreachable => field::UNUSED.end,
|
|
|
- _ => field::CHECKSUM.end // make a conservative assumption
|
|
|
+ _ => field::UNUSED.end // make a conservative assumption
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -607,4 +603,12 @@ mod test {
|
|
|
repr.emit(&mut packet, &ChecksumCapabilities::default());
|
|
|
assert_eq!(&packet.into_inner()[..], &ECHO_PACKET_BYTES[..]);
|
|
|
}
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn test_check_len() {
|
|
|
+ let bytes = [0x0b, 0x00, 0x00, 0x00,
|
|
|
+ 0x00, 0x00, 0x00, 0x00];
|
|
|
+ assert_eq!(Packet::new_checked(&bytes[..4]), Err(Error::Truncated));
|
|
|
+ assert!(Packet::new_checked(&bytes[..]).is_ok());
|
|
|
+ }
|
|
|
}
|