Skip to content

Commit 86b2621

Browse files
tompngbyroot
authored andcommitted
[ruby/json] Reject invalid number: - -.1 -e0
ruby/json@b9bfeecfa9
1 parent 525d7a6 commit 86b2621

File tree

2 files changed

+5
-0
lines changed

2 files changed

+5
-0
lines changed

ext/json/parser/parser.c

+2
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

+3
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)