Don't allow floats starting with a dot
diff --git a/lexer.go b/lexer.go index 2593466..c4a2bd6 100644 --- a/lexer.go +++ b/lexer.go
@@ -234,6 +234,10 @@ return lexNumber } + if next == '.' { + return l.errorf("cannot start float with a dot") + } + if isSpace(next) { l.ignore() } @@ -416,6 +420,9 @@ l.backup() break } + if point_seen && !digit_seen { + return l.errorf("cannot start float with a dot") + } } if !digit_seen {
diff --git a/parser.go b/parser.go index f91e80c..ee5758a 100644 --- a/parser.go +++ b/parser.go
@@ -141,6 +141,8 @@ return val case tokenLeftBracket: return parseArray(p) + case tokenError: + panic(tok.val) } panic("never reached")
diff --git a/parser_test.go b/parser_test.go index 441c4e2..9beef36 100644 --- a/parser_test.go +++ b/parser_test.go
@@ -210,6 +210,18 @@ } } +func TestFloatsWithoutLeadingZeros(t *testing.T) { + _, err := Load("a = .42") + if err.Error() != "cannot start float with a dot" { + t.Error("Bad error message:", err.Error()) + } + + _, err = Load("a = -.42") + if err.Error() != "cannot start float with a dot" { + t.Error("Bad error message:", err.Error()) + } +} + func TestMissingFile(t *testing.T) { _, err := LoadFile("foo.toml") if err.Error() != "open foo.toml: no such file or directory" {