regparse.c: initialize return values

* regparse.c (parse_char_class): initialize return values before
  depth limit check.  returned values will be freed in callers
  regardless the error.  [ruby-core:79624] [Bug #13234]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57660 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-02-20 09:46:12 +00:00
parent f28de8c06a
commit ea940cc4dc
5 changed files with 57 additions and 1 deletions

View file

@ -1198,6 +1198,25 @@ class TestRegexp < Test::Unit::TestCase
RUBY
end
def test_invalid_free_at_parse_depth_limit_over
assert_separately([], "#{<<-"begin;"}\n#{<<-"end;"}")
begin;
begin
require '-test-/regexp'
rescue LoadError
else
bug = '[ruby-core:79624] [Bug #13234]'
Bug::Regexp.parse_depth_limit = 10
src = "[" * 100
3.times do
assert_raise_with_message(RegexpError, /parse depth limit over/, bug) do
Regexp.new(src)
end
end
end
end;
end
# This assertion is for porting x2() tests in testpy.py of Onigmo.
def assert_match_at(re, str, positions, msg = nil)
re = Regexp.new(re) unless re.is_a?(Regexp)