diff --git a/parser.go b/parser.go index 03385c12..1781cc94 100644 --- a/parser.go +++ b/parser.go @@ -1030,8 +1030,12 @@ func isValidBinaryRune(r byte) bool { } func expect(x byte, b []byte) ([]byte, error) { + if len(b) == 0 { + return nil, newDecodeError(b, "expected character %c but the document ended here", x) + } + if b[0] != x { - return nil, newDecodeError(b[0:1], "expected character %U", x) + return nil, newDecodeError(b[0:1], "expected character %c", x) } return b[1:], nil diff --git a/unmarshaler_test.go b/unmarshaler_test.go index 89b96fd6..008dfda3 100644 --- a/unmarshaler_test.go +++ b/unmarshaler_test.go @@ -1722,6 +1722,12 @@ func TestIssue507(t *testing.T) { require.Error(t, err) } +func TestIssue579(t *testing.T) { + var v interface{} + err := toml.Unmarshal([]byte(`[foo`), &v) + require.Error(t, err) +} + //nolint:funlen func TestUnmarshalDecodeErrors(t *testing.T) { examples := []struct {