Skip to content

Commit

Permalink
tls_codec: Fix TlsByteVecUX deserialization (#1132)
Browse files Browse the repository at this point in the history
The DeserializeBytes impl of TlsByteVecUX did not skip the length prefix
bytes.
  • Loading branch information
imor authored Jul 3, 2023
1 parent ecc545a commit e0e12c8
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
4 changes: 3 additions & 1 deletion tls_codec/src/tls_vec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,9 @@ macro_rules! impl_byte_deserialize {
u16::MAX
)));
}
let vec = bytes.get(..len).ok_or(Error::EndOfStream)?;
let vec = bytes
.get($len_len..len + $len_len)
.ok_or(Error::EndOfStream)?;
let result = Self { vec: vec.to_vec() };
Ok((result, &remainder.get(len..).ok_or(Error::EndOfStream)?))
}
Expand Down
28 changes: 28 additions & 0 deletions tls_codec/tests/decode_bytes.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
use tls_codec::{DeserializeBytes, TlsByteVecU16, TlsByteVecU32, TlsByteVecU8};

#[test]
fn deserialize_tls_byte_vec_u8() {
let bytes = [3, 2, 1, 0];
let (result, rest) = TlsByteVecU8::tls_deserialize(&bytes).unwrap();
let expected_result = [2, 1, 0];
assert_eq!(result.as_slice(), expected_result);
assert_eq!(rest, []);
}

#[test]
fn deserialize_tls_byte_vec_u16() {
let bytes = [0, 3, 2, 1, 0];
let (result, rest) = TlsByteVecU16::tls_deserialize(&bytes).unwrap();
let expected_result = [2, 1, 0];
assert_eq!(result.as_slice(), expected_result);
assert_eq!(rest, []);
}

#[test]
fn deserialize_tls_byte_vec_u32() {
let bytes = [0, 0, 0, 3, 2, 1, 0];
let (result, rest) = TlsByteVecU32::tls_deserialize(&bytes).unwrap();
let expected_result = [2, 1, 0];
assert_eq!(result.as_slice(), expected_result);
assert_eq!(rest, []);
}

0 comments on commit e0e12c8

Please sign in to comment.