Skip to content

Commit bf35de8

Browse files
committed
Fix assign nil slice value
1 parent 14f03c1 commit bf35de8

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

internal/decoder/slice.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ import (
99
"github.com/goccy/go-json/internal/runtime"
1010
)
1111

12+
var (
13+
sliceType = runtime.Type2RType(
14+
reflect.TypeOf((*sliceHeader)(nil)).Elem(),
15+
)
16+
nilSlice = unsafe.Pointer(&sliceHeader{})
17+
)
18+
1219
type sliceDecoder struct {
1320
elemType *runtime.Type
1421
isElemPointerType bool
@@ -107,7 +114,7 @@ func (d *sliceDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) er
107114
if err := nullBytes(s); err != nil {
108115
return err
109116
}
110-
*(*unsafe.Pointer)(p) = nil
117+
typedmemmove(sliceType, p, nilSlice)
111118
return nil
112119
case '[':
113120
s.cursor++
@@ -216,7 +223,7 @@ func (d *sliceDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe
216223
return 0, err
217224
}
218225
cursor += 4
219-
*(*unsafe.Pointer)(p) = nil
226+
typedmemmove(sliceType, p, nilSlice)
220227
return cursor, nil
221228
case '[':
222229
cursor++

0 commit comments

Comments
 (0)