Decode: check buffer length before parsing simple key (#717)
Fixes #714
This commit is contained in:
@@ -693,6 +693,10 @@ func (p *parser) parseKey(b []byte) (ast.Reference, []byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *parser) parseSimpleKey(b []byte) (raw, key, rest []byte, err error) {
|
func (p *parser) parseSimpleKey(b []byte) (raw, key, rest []byte, err error) {
|
||||||
|
if len(b) == 0 {
|
||||||
|
return nil, nil, nil, newDecodeError(b, "expected key but found none")
|
||||||
|
}
|
||||||
|
|
||||||
// simple-key = quoted-key / unquoted-key
|
// simple-key = quoted-key / unquoted-key
|
||||||
// unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _
|
// unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _
|
||||||
// quoted-key = basic-string / literal-string
|
// quoted-key = basic-string / literal-string
|
||||||
|
|||||||
@@ -2338,6 +2338,15 @@ func TestIssue715(t *testing.T) {
|
|||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIssue714(t *testing.T) {
|
||||||
|
var v interface{}
|
||||||
|
err := toml.Unmarshal([]byte("0."), &v)
|
||||||
|
require.Error(t, err)
|
||||||
|
|
||||||
|
err = toml.Unmarshal([]byte("0={0=0,"), &v)
|
||||||
|
require.Error(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestUnmarshalDecodeErrors(t *testing.T) {
|
func TestUnmarshalDecodeErrors(t *testing.T) {
|
||||||
examples := []struct {
|
examples := []struct {
|
||||||
desc string
|
desc string
|
||||||
|
|||||||
Reference in New Issue
Block a user