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) {
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user