From fdd32cccf27ee9e05f809978d78d8fd33dd5c27f Mon Sep 17 00:00:00 2001 From: Nao Yonashiro Date: Sat, 12 Mar 2022 23:41:52 +0900 Subject: [PATCH 1/2] test: adds ints boundary cases --- decode_test.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/decode_test.go b/decode_test.go index a3cb746..209c658 100644 --- a/decode_test.go +++ b/decode_test.go @@ -1317,6 +1317,12 @@ var unmarshalTests = []unmarshalTest{ ptr: new(string), out: "hello\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdworld", }, + {in: "-128", ptr: new(int8), out: int8(-128)}, + {in: "127", ptr: new(int8), out: int8(127)}, + {in: "-32768", ptr: new(int16), out: int16(-32768)}, + {in: "32767", ptr: new(int16), out: int16(32767)}, + {in: "-2147483648", ptr: new(int32), out: int32(-2147483648)}, + {in: "2147483647", ptr: new(int32), out: int32(2147483647)}, } type All struct { From f714c3961d4f55c07e1804335cf99bbbb3e83509 Mon Sep 17 00:00:00 2001 From: Nao Yonashiro Date: Sat, 12 Mar 2022 23:43:03 +0900 Subject: [PATCH 2/2] fix: to care ints minimum values close #343 --- internal/decoder/int.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/decoder/int.go b/internal/decoder/int.go index 7edfb04..509b753 100644 --- a/internal/decoder/int.go +++ b/internal/decoder/int.go @@ -192,15 +192,15 @@ func (d *intDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) erro } switch d.kind { case reflect.Int8: - if i64 <= -1*(1<<7) || (1<<7) <= i64 { + if i64 < -1*(1<<7) || (1<<7) <= i64 { return d.typeError(bytes, s.totalOffset()) } case reflect.Int16: - if i64 <= -1*(1<<15) || (1<<15) <= i64 { + if i64 < -1*(1<<15) || (1<<15) <= i64 { return d.typeError(bytes, s.totalOffset()) } case reflect.Int32: - if i64 <= -1*(1<<31) || (1<<31) <= i64 { + if i64 < -1*(1<<31) || (1<<31) <= i64 { return d.typeError(bytes, s.totalOffset()) } } @@ -225,15 +225,15 @@ func (d *intDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.P } switch d.kind { case reflect.Int8: - if i64 <= -1*(1<<7) || (1<<7) <= i64 { + if i64 < -1*(1<<7) || (1<<7) <= i64 { return 0, d.typeError(bytes, cursor) } case reflect.Int16: - if i64 <= -1*(1<<15) || (1<<15) <= i64 { + if i64 < -1*(1<<15) || (1<<15) <= i64 { return 0, d.typeError(bytes, cursor) } case reflect.Int32: - if i64 <= -1*(1<<31) || (1<<31) <= i64 { + if i64 < -1*(1<<31) || (1<<31) <= i64 { return 0, d.typeError(bytes, cursor) } }