Browse Source

Increase required size for ICMPv4 packets

 - Increase the size required in Icmpv4Packet::check_len to 8 bytes
 - Add a test
Dan Robertson 7 years ago
parent
commit
3ff7e07941
1 changed files with 11 additions and 7 deletions
  1. 11 7
      src/wire/icmpv4.rs

+ 11 - 7
src/wire/icmpv4.rs

@@ -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());
+    }
 }