From d9df77a119f49379052e524092c824f3a07701c7 Mon Sep 17 00:00:00 2001 From: Nao Yonashiro Date: Thu, 7 Apr 2022 18:10:49 +0900 Subject: [PATCH] fix: add a fallback uint8 sliceDecoder to bytesDecoder fix #360 --- decode_test.go | 11 +++++++++++ internal/decoder/bytes.go | 5 ++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/decode_test.go b/decode_test.go index 57d9c6a..577d1d5 100644 --- a/decode_test.go +++ b/decode_test.go @@ -3907,3 +3907,14 @@ func TestIssue342(t *testing.T) { t.Errorf("unexpected result: got(%v) != expected(%v)", got, expected) } } + +func TestIssue360(t *testing.T) { + var uints []uint8 + err := json.Unmarshal([]byte(`[0, 1, 2]`), &uints) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if len(uints) != 3 || !(uints[0] == 0 && uints[1] == 1 && uints[2] == 2) { + t.Errorf("unexpected result: %v", uints) + } +} diff --git a/internal/decoder/bytes.go b/internal/decoder/bytes.go index 01a37fe..92c7dcf 100644 --- a/internal/decoder/bytes.go +++ b/internal/decoder/bytes.go @@ -23,9 +23,8 @@ func byteUnmarshalerSliceDecoder(typ *runtime.Type, structName string, fieldName unmarshalDecoder = newUnmarshalJSONDecoder(runtime.PtrTo(typ), structName, fieldName) case runtime.PtrTo(typ).Implements(unmarshalTextType): unmarshalDecoder = newUnmarshalTextDecoder(runtime.PtrTo(typ), structName, fieldName) - } - if unmarshalDecoder == nil { - return nil + default: + unmarshalDecoder, _ = compileUint8(typ, structName, fieldName) } return newSliceDecoder(unmarshalDecoder, typ, 1, structName, fieldName) }