Skip to content

Commit 8f1bba3

Browse files
authored
Merge pull request #735 from tompng/fix_invalid_number
Reject invalid number: `-` `-.1` `-e0`
2 parents 96079a1 + b9bfeec commit 8f1bba3

File tree

2 files changed

+5
-0
lines changed

2 files changed

+5
-0
lines changed

ext/json/ext/parser/parser.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -990,6 +990,8 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config)
990990
raise_parse_error("invalid number: %s", start);
991991
} else if (RB_UNLIKELY(integer_length > 2 && start[0] == '-' && start[1] == '0')) {
992992
raise_parse_error("invalid number: %s", start);
993+
} else if (RB_UNLIKELY(integer_length == 1 && start[0] == '-')) {
994+
raise_parse_error("invalid number: %s", start);
993995
}
994996

995997
if ((state->cursor < state->end) && (*state->cursor == '.')) {

test/json/json_parser_test.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ def test_parse_numbers
109109
assert_raise(JSON::ParserError) { parse('-023.12') }
110110
assert_raise(JSON::ParserError) { parse('023e12') }
111111
assert_raise(JSON::ParserError) { parse('-023e12') }
112+
assert_raise(JSON::ParserError) { parse('-') }
113+
assert_raise(JSON::ParserError) { parse('-.1') }
114+
assert_raise(JSON::ParserError) { parse('-e0') }
112115
assert_equal(23, parse('23'))
113116
assert_equal(-23, parse('-23'))
114117
assert_equal_float(3.141, parse('3.141'))

0 commit comments

Comments
 (0)