Open infosecual opened 5 months ago
Describe the bug Unmarshal will panic on malformed octets.
Unmarshal
To Reproduce I made a test function in a fork of this project that will reliably trigger the panic here.
The offending test case is simple:
%YAML 1.2 --- a: 1 b: 0_
Expected behavior A clear error returned from Unmarshal that gracefully handles the malformed token (no panic) .
Version Variables
Additional context Here is the panic output:
Running tool: /usr/local/go/bin/go test -timeout 30s -run ^TestUnmarshalOctet$ github.com/goccy/go-yaml --- FAIL: TestUnmarshalOctet (0.00s) panic: runtime error: index out of range [1] with length 1 [recovered] panic: runtime error: index out of range [1] with length 1 goroutine 6 [running]: testing.tRunner.func1.2({0x742ce0, 0xc0003182e8}) /usr/local/go/src/testing/testing.go:1631 +0x24a testing.tRunner.func1() /usr/local/go/src/testing/testing.go:1634 +0x377 panic({0x742ce0?, 0xc0003182e8?}) /usr/local/go/src/runtime/panic.go:770 +0x132 github.com/goccy/go-yaml/ast.Integer(0xc000017130) /home/user/repos/infosecual-go-yaml/ast/ast.go:336 +0x9d2 github.com/goccy/go-yaml/parser.(*parser).parseScalarValue(0x7fd1d9453bf8?, 0xc000017130) /home/user/repos/infosecual-go-yaml/parser/parser.go:470 +0x48e github.com/goccy/go-yaml/parser.(*parser).parseScalarValueWithComment(0xc0000edcb8, 0xc000328500, 0x0?) /home/user/repos/infosecual-go-yaml/parser/parser.go:443 +0x25 github.com/goccy/go-yaml/parser.(*parser).createNodeFromToken(0xc0000edcb8, 0xc000328500, 0xc000017130) /home/user/repos/infosecual-go-yaml/parser/parser.go:650 +0x4a github.com/goccy/go-yaml/parser.(*parser).parseToken(0xa43f20?, 0xc000328500, 0x0?) /home/user/repos/infosecual-go-yaml/parser/parser.go:632 +0x1c github.com/goccy/go-yaml/parser.(*parser).parse(0xc0000edcb8, {0xc000074230?, 0x1?, 0x0?}, 0x0?) /home/user/repos/infosecual-go-yaml/parser/parser.go:688 +0x14d github.com/goccy/go-yaml/parser.Parse({0xc000074230?, 0xc0002fb600?, 0x2?}, 0x7fd1d94790e8?) /home/user/repos/infosecual-go-yaml/parser/parser.go:724 +0x29 github.com/goccy/go-yaml/parser.ParseBytes({0xc0002fb600?, 0xc0002e4690?, 0x7e2d60?}, 0x0) /home/user/repos/infosecual-go-yaml/parser/parser.go:714 +0x3d github.com/goccy/go-yaml.(*Decoder).parse(0xc000000180, {0xc0002fb600?, 0x7e2d40?, 0xc0002e4690?}) /home/user/repos/infosecual-go-yaml/decode.go:1642 +0x3e github.com/goccy/go-yaml.(*Decoder).decodeInit(0xc000000180) /home/user/repos/infosecual-go-yaml/decode.go:1670 +0xb1 github.com/goccy/go-yaml.(*Decoder).DecodeContext(0xc000000180, {0x7e4e10, 0xa43f20}, {0x6ee4a0?, 0xc000012228?}) /home/user/repos/infosecual-go-yaml/decode.go:1718 +0x19a github.com/goccy/go-yaml.UnmarshalContext({0x7e4e10, 0xa43f20}, {0xc00030fc58, 0x2, 0x8}, {0x6ee4a0, 0xc000012228}, {0x0, 0x0, 0x0}) /home/user/repos/infosecual-go-yaml/yaml.go:191 +0x225 github.com/goccy/go-yaml.UnmarshalWithOptions(...) /home/user/repos/infosecual-go-yaml/yaml.go:185 github.com/goccy/go-yaml.Unmarshal(...) /home/user/repos/infosecual-go-yaml/yaml.go:179 github.com/goccy/go-yaml_test.TestUnmarshalOctet(0xc0000d0d00) /home/user/repos/infosecual-go-yaml/yaml_test.go:53 +0x7c testing.tRunner(0xc0000d0d00, 0x77b7c0) /usr/local/go/src/testing/testing.go:1689 +0xfb created by testing.(*T).Run in goroutine 1 /usr/local/go/src/testing/testing.go:1742 +0x390 FAIL github.com/goccy/go-yaml 0.005s FAIL
Describe the bug
Unmarshal
will panic on malformed octets.To Reproduce I made a test function in a fork of this project that will reliably trigger the panic here.
The offending test case is simple:
Expected behavior A clear error returned from
Unmarshal
that gracefully handles the malformed token (no panic) .Version Variables
Additional context Here is the panic output: