File tree Expand file tree Collapse file tree 2 files changed +12
-2
lines changed Expand file tree Collapse file tree 2 files changed +12
-2
lines changed Original file line number Diff line number Diff line change @@ -84,7 +84,7 @@ macro_rules! impl_varint {
8484
8585 fn decode_var( src: & [ u8 ] ) -> Option <( Self , usize ) > {
8686 let ( n, s) = u64 :: decode_var( src) ?;
87- Some ( ( n as Self , s) )
87+ Some ( ( < Self as std :: convert :: TryFrom < u64 >> :: try_from ( n ) . ok ( ) ? , s) )
8888 }
8989
9090 fn encode_var( self , dst: & mut [ u8 ] ) -> usize {
@@ -100,7 +100,7 @@ macro_rules! impl_varint {
100100
101101 fn decode_var( src: & [ u8 ] ) -> Option <( Self , usize ) > {
102102 let ( n, s) = i64 :: decode_var( src) ?;
103- Some ( ( n as Self , s) )
103+ Some ( ( < Self as std :: convert :: TryFrom < i64 >> :: try_from ( n ) . ok ( ) ? , s) )
104104 }
105105
106106 fn encode_var( self , dst: & mut [ u8 ] ) -> usize {
Original file line number Diff line number Diff line change @@ -209,4 +209,14 @@ mod tests {
209209 std:: io:: ErrorKind :: InvalidData
210210 ) ;
211211 }
212+
213+ #[ test]
214+ fn test_decode_var_too_big ( ) {
215+ assert_eq ! ( u8 :: decode_var( & 0x1FF_u64 . encode_var_vec( ) ) , None , "u8" ) ;
216+ assert_eq ! ( u16 :: decode_var( & 0x1FFFF_u64 . encode_var_vec( ) ) , None , "u16" ) ;
217+ assert_eq ! ( u32 :: decode_var( & 0x1FFFFFFFF_u64 . encode_var_vec( ) ) , None , "u32" ) ;
218+ assert_eq ! ( i8 :: decode_var( & 0x80_i64 . encode_var_vec( ) ) , None , "i8" ) ;
219+ assert_eq ! ( i16 :: decode_var( & 0x8000_i64 . encode_var_vec( ) ) , None , "i16" ) ;
220+ assert_eq ! ( i32 :: decode_var( & 0x80000000_i64 . encode_var_vec( ) ) , None , "i32" ) ;
221+ }
212222}
You can’t perform that action at this time.
0 commit comments