diff --git a/parser.go b/parser.go index ce493cb..071807d 100644 --- a/parser.go +++ b/parser.go @@ -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) { + if len(b) == 0 { + return nil, nil, nil, newDecodeError(b, "expected key but found none") + } + // simple-key = quoted-key / unquoted-key // unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _ // quoted-key = basic-string / literal-string diff --git a/unmarshaler_test.go b/unmarshaler_test.go index 7ba5526..584e33e 100644 --- a/unmarshaler_test.go +++ b/unmarshaler_test.go @@ -2338,6 +2338,15 @@ func TestIssue715(t *testing.T) { 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) { examples := []struct { desc string