From 10600846a6b55db424792e6686d79c2d344b2afb Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 8 Aug 2021 15:41:12 +0100 Subject: [PATCH] apply MTU to decoded, not encoded, len Signed-off-by: Ian Jackson --- src/slip.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/slip.rs b/src/slip.rs index 397aa54..b1d6eca 100644 --- a/src/slip.rs +++ b/src/slip.rs @@ -66,14 +66,12 @@ where AC: Fn(&[u8]) -> Result<(), PacketError>, if packet.len() == 0 { throw!(PacketError::Empty) } - if packet.len() > mtu.sat() { - throw!(PacketError::MTU { len: packet.len(), mtu }); - } let mut packet: Box<[u8]> = packet.to_owned().into(); let mut walk: &mut [u8] = &mut packet; let mut header = [0u8; HEADER_FOR_ADDR]; let mut wheader = &mut header[..]; + let mut escapes = 0; while let Some((i, was_mime)) = walk.iter().enumerate().find_map( |(i,&c)| match c { @@ -94,6 +92,7 @@ where AC: Fn(&[u8]) -> Result<(), PacketError>, }; let _ = wheader.write(&[c]); walk = &mut walk[i+2 ..]; + escapes += 1; } else { let _ = wheader.write(&[SLIP_MIME_ESC]); walk = &mut walk[i+1 ..]; @@ -103,6 +102,11 @@ where AC: Fn(&[u8]) -> Result<(), PacketError>, let wheader_len = wheader.len(); let header = &header[0.. header.len() - wheader_len]; + let decoded_len = packet.len() - escapes; + if decoded_len > mtu.sat() { + throw!(PacketError::MTU { len: decoded_len, mtu }); + } + addr_chk(&header)?; packet -- 2.30.2