-
-
Notifications
You must be signed in to change notification settings - Fork 185
Open
Description
package main
import (
"encoding/json"
"fmt"
gj "github.com/goccy/go-json"
)
type device struct {
Alerts [][]any
Items []device
ID int64
}
const data = `
{
"items": [
{
"alerts": [[2]],
"id": 2
}
],
"id": 1
}
`
func main() {
var d device
json.Unmarshal([]byte(data), &d)
fmt.Printf("%+v\n", d)
gj.Marshal(d)
}produces
{Alerts:[] Items:[{Alerts:[[2]] Items:[] ID:2}] ID:1}
unexpected fault address 0x0
fatal error: fault
[signal SIGSEGV: segmentation violation code=0x80 addr=0x0 pc=0x48f040]
goroutine 1 gp=0xc000002380 m=0 mp=0x6bb2c0 [running]:
runtime.throw({0x581256?, 0x7f41447b5108?})
/usr/local/go/src/runtime/panic.go:1101 +0x48 fp=0xc00008f718 sp=0xc00008f6e8 pc=0x46a5c8
runtime.sigpanic()
/usr/local/go/src/runtime/signal_unix.go:939 +0x26c fp=0xc00008f778 sp=0xc00008f718 pc=0x46bdcc
reflect.(*rtype).common(...)
/usr/local/go/src/reflect/type.go:324
reflect.(*rtype).Implements(0xd775dd79aaa9aab5, {0x5c8950, 0x55fba0})
/usr/local/go/src/reflect/type.go:1392 +0x60 fp=0xc00008f798 sp=0xc00008f778 pc=0x48f040
github.com/goccy/go-json/internal/runtime.(*Type).Implements(...)
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/internal/runtime/rtype.go:96
github.com/goccy/go-json/internal/encoder.(*Compiler).implementsMarshalJSONType(0xc00008f820?, 0xd775dd79aaa9aab5)
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/internal/encoder/compiler.go:884 +0x2c fp=0xc00008f7c0 sp=0xc00008f798 pc=0x4e7c6c
github.com/goccy/go-json/internal/encoder.(*Compiler).implementsMarshalJSON(0xc00008f948, 0xd775dd79aaa9aab5)
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/internal/encoder/compiler.go:838 +0x1d fp=0xc00008f7e0 sp=0xc00008f7c0 pc=0x4e7a5d
github.com/goccy/go-json/internal/encoder.(*Compiler).typeToCode(0xc00008f948, 0xd775dd79aaa9aab5)
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/internal/encoder/compiler.go:146 +0x25 fp=0xc00008f830 sp=0xc00008f7e0 pc=0x4e4265
github.com/goccy/go-json/internal/encoder.(*Compiler).compile(0xc00008f948, 0xd775dd79aaa9aab5)
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/internal/encoder/compiler.go:104 +0x25 fp=0xc00008f868 sp=0xc00008f830 pc=0x4e3ea5
github.com/goccy/go-json/internal/encoder.compileToGetCodeSetSlowPath(0xd775dd79aaa9aab5)
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/internal/encoder/compiler.go:62 +0xe5 fp=0xc00008f960 sp=0xc00008f868 pc=0x4e3c05
github.com/goccy/go-json/internal/encoder.CompileToGetCodeSet(0xc0001025b0, 0xd775dd79aaa9aab5)
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/internal/encoder/compiler_norace.go:9 +0x56 fp=0xc00008fa50 sp=0xc00008f960 pc=0x4e82d6
github.com/goccy/go-json/internal/encoder/vm.Run(0xc0001025b0, {0xc00011c000?, 0x0?, 0x400?}, 0xc00010a070?)
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/internal/encoder/vm/vm.go:206 +0x2519b fp=0xc000091da0 sp=0xc00008fa50 pc=0x54805b
github.com/goccy/go-json.encodeRunCode(0xc0001025b0?, {0xc00011c000?, 0xc000115dd8?, 0xc0001002c0?}, 0xc00011c400?)
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/encode.go:310 +0x56 fp=0xc000091dd8 sp=0xc000091da0 pc=0x5496f6
github.com/goccy/go-json.encode(0xc0001025b0, {0x56d2a0, 0xc000100280})
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/encode.go:235 +0x205 fp=0xc000091e58 sp=0xc000091dd8 pc=0x549605
github.com/goccy/go-json.marshal({0x56d2a0, 0xc000100280}, {0x0, 0x0, 0xc000100280?})
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/encode.go:150 +0xb7 fp=0xc000091eb8 sp=0xc000091e58 pc=0x5492f7
github.com/goccy/go-json.MarshalWithOption(...)
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/json.go:185
github.com/goccy/go-json.Marshal({0x56d2a0?, 0xc000100280?})
/home/xrfang/go/pkg/mod/github.com/goccy/go-json@v0.10.5/json.go:170 +0x25 fp=0xc000091ef0 sp=0xc000091eb8 pc=0x549765
main.main()
/home/xrfang/jsonTest/main.go:34 +0xe5 fp=0xc000091f50 sp=0xc000091ef0 pc=0x549965
runtime.main()
/usr/local/go/src/runtime/proc.go:283 +0x28b fp=0xc000091fe0 sp=0xc000091f50 pc=0x43af2b
runtime.goexit({})
/usr/local/go/src/runtime/asm_amd64.s:1700 +0x1 fp=0xc000091fe8 sp=0xc000091fe0 pc=0x470fc1
goroutine 2 gp=0xc0000028c0 m=nil [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
/usr/local/go/src/runtime/proc.go:435 +0xce fp=0xc000048fa8 sp=0xc000048f88 pc=0x46a6ae
runtime.goparkunlock(...)
/usr/local/go/src/runtime/proc.go:441
runtime.forcegchelper()
/usr/local/go/src/runtime/proc.go:348 +0xb3 fp=0xc000048fe0 sp=0xc000048fa8 pc=0x43b273
runtime.goexit({})
/usr/local/go/src/runtime/asm_amd64.s:1700 +0x1 fp=0xc000048fe8 sp=0xc000048fe0 pc=0x470fc1
created by runtime.init.7 in goroutine 1
/usr/local/go/src/runtime/proc.go:336 +0x1a
goroutine 3 gp=0xc000002e00 m=nil [GC sweep wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
/usr/local/go/src/runtime/proc.go:435 +0xce fp=0xc000049780 sp=0xc000049760 pc=0x46a6ae
runtime.goparkunlock(...)
/usr/local/go/src/runtime/proc.go:441
runtime.bgsweep(0xc000026080)
/usr/local/go/src/runtime/mgcsweep.go:276 +0x94 fp=0xc0000497c8 sp=0xc000049780 pc=0x426e14
runtime.gcenable.gowrap1()
/usr/local/go/src/runtime/mgc.go:204 +0x25 fp=0xc0000497e0 sp=0xc0000497c8 pc=0x41b545
runtime.goexit({})
/usr/local/go/src/runtime/asm_amd64.s:1700 +0x1 fp=0xc0000497e8 sp=0xc0000497e0 pc=0x470fc1
created by runtime.gcenable in goroutine 1
/usr/local/go/src/runtime/mgc.go:204 +0x66
goroutine 4 gp=0xc000002fc0 m=nil [GC scavenge wait]:
runtime.gopark(0xc000026080?, 0x5c4cd0?, 0x1?, 0x0?, 0xc000002fc0?)
/usr/local/go/src/runtime/proc.go:435 +0xce fp=0xc000049f78 sp=0xc000049f58 pc=0x46a6ae
runtime.goparkunlock(...)
/usr/local/go/src/runtime/proc.go:441
runtime.(*scavengerState).park(0x6ba3e0)
/usr/local/go/src/runtime/mgcscavenge.go:425 +0x49 fp=0xc000049fa8 sp=0xc000049f78 pc=0x4248c9
runtime.bgscavenge(0xc000026080)
/usr/local/go/src/runtime/mgcscavenge.go:653 +0x3c fp=0xc000049fc8 sp=0xc000049fa8 pc=0x424e3c
runtime.gcenable.gowrap2()
/usr/local/go/src/runtime/mgc.go:205 +0x25 fp=0xc000049fe0 sp=0xc000049fc8 pc=0x41b4e5
runtime.goexit({})
/usr/local/go/src/runtime/asm_amd64.s:1700 +0x1 fp=0xc000049fe8 sp=0xc000049fe0 pc=0x470fc1
created by runtime.gcenable in goroutine 1
/usr/local/go/src/runtime/mgc.go:205 +0xa5
goroutine 5 gp=0xc000003500 m=nil [finalizer wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
/usr/local/go/src/runtime/proc.go:435 +0xce fp=0xc000048630 sp=0xc000048610 pc=0x46a6ae
runtime.runfinq()
/usr/local/go/src/runtime/mfinal.go:196 +0x107 fp=0xc0000487e0 sp=0xc000048630 pc=0x41a507
runtime.goexit({})
/usr/local/go/src/runtime/asm_amd64.s:1700 +0x1 fp=0xc0000487e8 sp=0xc0000487e0 pc=0x470fc1
created by runtime.createfing in goroutine 1
/usr/local/go/src/runtime/mfinal.go:166 +0x3d
exit status 2
If the type definition changes to:
type device struct {
ID int64
Alerts [][]any
Items []device
}
The program will not crash.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels