[ruby/json] Fix a regression in the parser with leading /
Ref: https://github.com/ruby/ruby/pull/12598 This could lead to an infinite loop. https://github.com/ruby/json/commit/f8cfa2696a
This commit is contained in:
parent
4404688a0e
commit
33708f2dc4
Notes:
git
2025-01-20 09:32:14 +00:00
@ -476,7 +476,7 @@ static const bool whitespace[256] = {
|
||||
['/'] = 1,
|
||||
};
|
||||
|
||||
static void
|
||||
static bool
|
||||
json_eat_comments(JSON_ParserState *state)
|
||||
{
|
||||
if (state->cursor + 1 < state->end) {
|
||||
@ -508,9 +508,10 @@ json_eat_comments(JSON_ParserState *state)
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline void
|
||||
@ -520,7 +521,9 @@ json_eat_whitespace(JSON_ParserState *state)
|
||||
if (RB_LIKELY(*state->cursor != '/')) {
|
||||
state->cursor++;
|
||||
} else {
|
||||
json_eat_comments(state);
|
||||
if (!json_eat_comments(state)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -629,6 +629,13 @@ class JSONParserTest < Test::Unit::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_parse_leading_slash
|
||||
# ref: https://github.com/ruby/ruby/pull/12598
|
||||
assert_raise(JSON::ParserError) do
|
||||
JSON.parse("/foo/bar")
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def string_deduplication_available?
|
||||
|
Loading…
x
Reference in New Issue
Block a user