From a8c1d430ef877d4002b70f352c612f0902e682d6 Mon Sep 17 00:00:00 2001 From: Koute Date: Tue, 7 Jun 2022 01:17:41 +0900 Subject: [PATCH] Fix one-by-off in `BoundedSlice::try_from` (#11600) --- .../frame/support/src/storage/bounded_vec.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/substrate/frame/support/src/storage/bounded_vec.rs b/substrate/frame/support/src/storage/bounded_vec.rs index f1f4330ab2..232f9f97fc 100644 --- a/substrate/frame/support/src/storage/bounded_vec.rs +++ b/substrate/frame/support/src/storage/bounded_vec.rs @@ -135,7 +135,7 @@ impl> Ord for BoundedVec { impl<'a, T, S: Get> TryFrom<&'a [T]> for BoundedSlice<'a, T, S> { type Error = (); fn try_from(t: &'a [T]) -> Result { - if t.len() < S::get() as usize { + if t.len() <= S::get() as usize { Ok(BoundedSlice(t, PhantomData)) } else { Err(()) @@ -1007,4 +1007,18 @@ pub mod test { _ => unreachable!("deserializer must raise error"), } } + + #[test] + fn bounded_vec_try_from_works() { + assert!(BoundedVec::>::try_from(vec![0]).is_ok()); + assert!(BoundedVec::>::try_from(vec![0, 1]).is_ok()); + assert!(BoundedVec::>::try_from(vec![0, 1, 2]).is_err()); + } + + #[test] + fn bounded_slice_try_from_works() { + assert!(BoundedSlice::>::try_from(&[0][..]).is_ok()); + assert!(BoundedSlice::>::try_from(&[0, 1][..]).is_ok()); + assert!(BoundedSlice::>::try_from(&[0, 1, 2][..]).is_err()); + } }