Skip to content

Commit a2149a5

Browse files
authored
Merge pull request #415 from goccy/fix-array-checkptr-error
Fix checkptr error for array decoder
2 parents 50a60f9 + 1480e00 commit a2149a5

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

decode_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4005,3 +4005,13 @@ func TestIssue384(t *testing.T) {
40054005
}
40064006
}
40074007
}
4008+
4009+
func TestIssue408(t *testing.T) {
4010+
type T struct {
4011+
Arr [2]int32 `json:"arr"`
4012+
}
4013+
var v T
4014+
if err := json.Unmarshal([]byte(`{"arr": [1,2]}`), &v); err != nil {
4015+
t.Fatal(err)
4016+
}
4017+
}

internal/decoder/array.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ type arrayDecoder struct {
1919
}
2020

2121
func newArrayDecoder(dec Decoder, elemType *runtime.Type, alen int, structName, fieldName string) *arrayDecoder {
22-
zeroValue := *(*unsafe.Pointer)(unsafe_New(elemType))
22+
// workaround to avoid checkptr errors. cannot use `*(*unsafe.Pointer)(unsafe_New(elemType))` directly.
23+
zeroValuePtr := unsafe_New(elemType)
24+
zeroValue := **(**unsafe.Pointer)(unsafe.Pointer(&zeroValuePtr))
2325
return &arrayDecoder{
2426
valueDecoder: dec,
2527
elemType: elemType,

0 commit comments

Comments
 (0)