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 {
84
84
85
85
fn decode_var( src: & [ u8 ] ) -> Option <( Self , usize ) > {
86
86
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) )
88
88
}
89
89
90
90
fn encode_var( self , dst: & mut [ u8 ] ) -> usize {
@@ -100,7 +100,7 @@ macro_rules! impl_varint {
100
100
101
101
fn decode_var( src: & [ u8 ] ) -> Option <( Self , usize ) > {
102
102
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) )
104
104
}
105
105
106
106
fn encode_var( self , dst: & mut [ u8 ] ) -> usize {
Original file line number Diff line number Diff line change @@ -209,4 +209,14 @@ mod tests {
209
209
std:: io:: ErrorKind :: InvalidData
210
210
) ;
211
211
}
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
+ }
212
222
}
You can’t perform that action at this time.
0 commit comments