Fix parsing local DoS (#279)

Closes #152

Adds additional checks when parsing TLV records to ensure panic-free
operation.
This commit is contained in:
Tony Arcieri (iqlusion)
2021-07-12 11:19:26 -07:00
committed by GitHub
parent 227518dd1b
commit 47776ebf0b
+6 -3
View File
@@ -50,13 +50,16 @@ impl<'a> Tlv<'a> {
} }
let tag = buffer[0]; let tag = buffer[0];
let mut len = 0; let mut len = 0;
let offset = 1 + get_length(&buffer[1..], &mut len); let offset = 1 + get_length(&buffer[1..], &mut len);
let buffer = buffer.get(offset..).ok_or(Error::SizeError)?;
let (value, buffer) = buffer[offset..].split_at(len); if buffer.len() >= len {
let (value, buffer) = buffer.split_at(len);
Ok((buffer, Tlv { tag, value })) Ok((buffer, Tlv { tag, value }))
} else {
Err(Error::SizeError)
}
} }
/// Takes a [`Buffer`] containing a single `Tlv` with the given tag, and returns a /// Takes a [`Buffer`] containing a single `Tlv` with the given tag, and returns a