From 0a33b684e0a0a8c98f505f3a2d20e91593bb1eeb Mon Sep 17 00:00:00 2001 From: Raminder Singh Date: Wed, 21 Jun 2023 19:02:36 +0530 Subject: [PATCH 1/2] add a few failing tests --- tls_codec/tests/decode_bytes.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 tls_codec/tests/decode_bytes.rs diff --git a/tls_codec/tests/decode_bytes.rs b/tls_codec/tests/decode_bytes.rs new file mode 100644 index 000000000..06e341517 --- /dev/null +++ b/tls_codec/tests/decode_bytes.rs @@ -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, []); +} From 75b498a12a62b0a947c10cfc73d945ba7e52b7af Mon Sep 17 00:00:00 2001 From: Raminder Singh Date: Sun, 2 Jul 2023 13:44:06 +0530 Subject: [PATCH 2/2] Fix a bug in TlsByteVecUX deserialization The DeserializeBytes impl of TlsByteVecUX did not skip the length prefix bytes. --- tls_codec/src/tls_vec.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tls_codec/src/tls_vec.rs b/tls_codec/src/tls_vec.rs index da0c9f0a0..f29f04477 100644 --- a/tls_codec/src/tls_vec.rs +++ b/tls_codec/src/tls_vec.rs @@ -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)?)) }