@@ -208,13 +208,18 @@ func (d *decoder) unmarshalInt32(size uint, offset uint, result reflect.Value) (
208
208
default :
209
209
return newOffset , newUnmarshalTypeError (value , result .Type ())
210
210
case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 :
211
- result .SetInt (int64 (value ))
211
+ n := int64 (value )
212
+ if result .OverflowInt (n ) {
213
+ return 0 , newUnmarshalTypeError (value , result .Type ())
214
+ }
215
+ result .SetInt (n )
212
216
return newOffset , nil
213
217
case reflect .Uint , reflect .Uint8 , reflect .Uint16 , reflect .Uint32 , reflect .Uint64 , reflect .Uintptr :
214
- if value < 0 {
218
+ n := uint64 (value )
219
+ if result .OverflowUint (n ) {
215
220
return 0 , newUnmarshalTypeError (value , result .Type ())
216
221
}
217
- result .SetUint (uint64 ( value ) )
222
+ result .SetUint (n )
218
223
return newOffset , nil
219
224
case reflect .Interface :
220
225
result .Set (reflect .ValueOf (value ))
@@ -293,9 +298,16 @@ func (d *decoder) unmarshalUint(size uint, offset uint, result reflect.Value, ui
293
298
default :
294
299
return newOffset , newUnmarshalTypeError (value , result .Type ())
295
300
case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 :
296
- result .SetInt (int64 (value ))
301
+ n := int64 (value )
302
+ if result .OverflowInt (n ) {
303
+ return 0 , newUnmarshalTypeError (value , result .Type ())
304
+ }
305
+ result .SetInt (n )
297
306
return newOffset , nil
298
307
case reflect .Uint , reflect .Uint8 , reflect .Uint16 , reflect .Uint32 , reflect .Uint64 , reflect .Uintptr :
308
+ if result .OverflowUint (value ) {
309
+ return 0 , newUnmarshalTypeError (value , result .Type ())
310
+ }
299
311
result .SetUint (value )
300
312
return newOffset , nil
301
313
case reflect .Interface :
0 commit comments