diff --git a/sexpdata.py b/sexpdata.py index df389d9..9aa24fb 100644 --- a/sexpdata.py +++ b/sexpdata.py @@ -730,6 +730,8 @@ def atom(self, token): return int(token) except ValueError: try: + if 'e' in token.lower() or 'inf' in token.lower(): + raise ValueError('Invalid s-exp float') return float(token) except ValueError: return Symbol(token) diff --git a/test_sexpdata.py b/test_sexpdata.py index 53bbca9..69c60d5 100644 --- a/test_sexpdata.py +++ b/test_sexpdata.py @@ -207,6 +207,12 @@ def test_tosexp_value_errors(): tosexp(Parens()) +def test_parse_float(): + assert parse("-1.012") == [-1.012] + assert parse("2E22") == [Symbol("2E22")] + assert parse("inf") == [Symbol("inf")] + + def test_too_many_brackets(): with pytest.raises(ExpectNothing): parse("(a b))")