go-yaml
go-yaml copied to clipboard
JSON is not marshalled with escaped content
Describe the bug Not very sure what's happening here, the value has some escaped JSON and which breaks on Unmarshal.
package main
import (
"fmt"
"github.com/goccy/go-yaml"
)
type EnvironmentVariables struct {
Name *string `json:"name,omitempty"`
Value *string `json:"value,omitempty"`
Type *string `json:"type,omitempty"`
Sha256 *string `json:"sha256,omitempty"`
}
type Manifest struct {
EnvironmentVariables []*EnvironmentVariables `json:"environmentVariables"`
}
func main() {
jsonStr := `{
"environmentVariables": [
{
"name": "HELP_CONFIG",
"value": "{\"key\":\"value\",\"CHAT_ENABLED\":\"true\",\"CALL_ENABLED\":\"false\"}",
"type": "CONFIG"
}
]
}`
var m Manifest
err := yaml.Unmarshal([]byte(jsonStr), &m)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", m)
}
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x60 pc=0x4eb9cf]
goroutine 1 [running]:
github.com/goccy/go-yaml.(*Decoder).decodeSlice(0xc000186000, {0x559038, 0x683c00}, {0x5033a0?, 0xc000182048?, 0xc0001b9670?}, {0x559b98?, 0xc0001b2000?})
/tmp/gopath2137611721/pkg/mod/github.com/goccy/[email protected]/decode.go:1371 +0x22f
github.com/goccy/go-yaml.(*Decoder).decodeValue(0xc000186000, {0x559038, 0x683c00}, {0x5033a0?, 0xc000182048?, 0x500a1b?}, {0x559b98, 0xc0001b2000})
/tmp/gopath2137611721/pkg/mod/github.com/goccy/[email protected]/decode.go:856 +0xf73
github.com/goccy/go-yaml.(*Decoder).createDecodedNewValue(0xc000186000, {0x559038, 0x683c00}, {0x55b600, 0x5033a0}, {0x5033a0?, 0xc000182000?, 0xc000190258?}, {0x559b98, 0xc0001b2000})
/tmp/gopath2137611721/pkg/mod/github.com/goccy/[email protected]/decode.go:968 +0x2ca
github.com/goccy/go-yaml.(*Decoder).decodeStruct(0xc000186000, {0x559038, 0x683c00}, {0x50db40?, 0xc000182000?, 0x180150?}, {0x559a98, 0xc0001a20c0})
/tmp/gopath2137611721/pkg/mod/github.com/goccy/[email protected]/decode.go:1255 +0xbca
github.com/goccy/go-yaml.(*Decoder).decodeValue(0xc000186000, {0x559038, 0x683c00}, {0x50db40?, 0xc000182000?, 0xc000180060?}, {0x559a98, 0xc0001a20c0})
/tmp/gopath2137611721/pkg/mod/github.com/goccy/[email protected]/decode.go:861 +0x1028
github.com/goccy/go-yaml.(*Decoder).decode(0xc000186000, {0x559038, 0x683c00}, {0x500b60?, 0xc000182000?, 0xc0?})
/tmp/gopath2137611721/pkg/mod/github.com/goccy/[email protected]/decode.go:1687 +0xbb
github.com/goccy/go-yaml.(*Decoder).DecodeContext(0xc000186000, {0x559038, 0x683c00}, {0x500b60?, 0xc000182000?})
/tmp/gopath2137611721/pkg/mod/github.com/goccy/[email protected]/decode.go:1722 +0x1d5
github.com/goccy/go-yaml.UnmarshalContext({0x559038, 0x683c00}, {0xc000184000, 0xbe, 0xc0}, {0x500b60, 0xc000182000}, {0x0, 0x0, 0x0})
/tmp/gopath2137611721/pkg/mod/github.com/goccy/[email protected]/yaml.go:191 +0x225
github.com/goccy/go-yaml.UnmarshalWithOptions(...)
/tmp/gopath2137611721/pkg/mod/github.com/goccy/[email protected]/yaml.go:185
github.com/goccy/go-yaml.Unmarshal(...)
/tmp/gopath2137611721/pkg/mod/github.com/goccy/[email protected]/yaml.go:179
main.main()
/tmp/sandbox1184541065/prog.go:31 +0x7c
If I remove any one key in that JSON the Unmarshal happens without errors.
To Reproduce Go Playground
Version Variables
- Go version: [e.g. 1.21 ]
- go-yaml's Version: [e.g. v1.11.3 ]