fix(proto): reject invalid echo packet lengths

This commit is contained in:
Nils Andreas Svee committed 2026-05-10 20:56:43 +07:00
1 parent d53dd7f406
commit dfdc43292a
5 files changed
+68 -6

No files matched your search

+18 -1
View File
@@ -57,7 +57,8 @@ impl Params {
9 => {
let (len, used) = varint::decode_uvarint(&input[pos..])?;
pos += used;
let len = len as usize;
let len = usize::try_from(len)
.map_err(|_| ProtoError::ParameterLengthTooLarge { tag, length: len })?;
if input.len().saturating_sub(pos) < len {
return Err(ProtoError::MalformedParams);
}
@@ -406,6 +407,22 @@ mod tests {
assert_eq!(Params::decode(&encoded), Err(ProtoError::InvalidUtf8));
}
#[cfg(target_pointer_width = "32")]
#[test]
fn server_fill_length_too_large_for_usize_is_rejected() {
let mut encoded = Vec::new();
varint::encode_uvarint(9, &mut encoded);
varint::encode_uvarint(u64::from(u32::MAX) + 1, &mut encoded);
assert_eq!(
Params::decode(&encoded),
Err(ProtoError::ParameterLengthTooLarge {
tag: 9,
length: u64::from(u32::MAX) + 1,
})
);
}
#[test]
fn truncated_varint_parameter_is_rejected() {
let encoded = [1, 0x80];