diff --git a/substrate/frame/support/src/traits/misc.rs b/substrate/frame/support/src/traits/misc.rs index 1f0ba1e769c24b80a0c3ebd7fa407d3e509502d7..ccbb47909d5f4d571bcd7ae95b80bb8a287ce508 100644 --- a/substrate/frame/support/src/traits/misc.rs +++ b/substrate/frame/support/src/traits/misc.rs @@ -745,7 +745,7 @@ impl<T: Encode> Encode for WrapperOpaque<T> { impl<T: Decode> Decode for WrapperOpaque<T> { fn decode<I: Input>(input: &mut I) -> Result<Self, codec::Error> { - Ok(Self(T::decode(&mut &<Vec<u8>>::decode(input)?[..])?)) + Ok(Self(T::decode_all(&mut &<Vec<u8>>::decode(input)?[..])?)) } fn skip<I: Input>(input: &mut I) -> Result<(), codec::Error> { @@ -967,6 +967,10 @@ mod test { 2usize.pow(14) - 1 + 2 ); assert_eq!(<WrapperOpaque<[u8; 2usize.pow(14)]>>::max_encoded_len(), 2usize.pow(14) + 4); + + let data = 4u64; + // Ensure that we check that the `Vec<u8>` is consumed completly on decode. + assert!(WrapperOpaque::<u32>::decode(&mut &data.encode().encode()[..]).is_err()); } #[test]