merge revision(s) 4f19666e8b: [Backport #16508]

`Regexp` in `MatchData` can be `nil`

	`String#sub` with a string pattern defers creating a `Regexp`
	until `MatchData#regexp` creates a `Regexp` from the matched
	string.  `Regexp#last_match(group_name)` accessed its content
	without creating the `Regexp` though.  [Bug #16508]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@67865 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
usa 2020-03-30 21:49:42 +00:00
parent b4446de7ad
commit 77d84046c7
3 changed files with 6 additions and 1 deletions

1
re.c
View file

@ -1883,6 +1883,7 @@ match_captures(VALUE match)
static int
name_to_backref_number(struct re_registers *regs, VALUE regexp, const char* name, const char* name_end)
{
if (NIL_P(regexp)) return -1;
return onig_name_to_backref_number(RREGEXP_PTR(regexp),
(const unsigned char *)name, (const unsigned char *)name_end, regs);
}

View file

@ -156,6 +156,10 @@ class TestRegexp < Test::Unit::TestCase
s = "foo"
s[/(?<bar>o)/, "bar"] = "baz"
assert_equal("fbazo", s)
/.*/ =~ "abc"
"a".sub("a", "")
assert_raise(IndexError) {Regexp.last_match(:_id)}
end
def test_named_capture_with_nul

View file

@ -1,6 +1,6 @@
#define RUBY_VERSION "2.5.8"
#define RUBY_RELEASE_DATE "2020-03-31"
#define RUBY_PATCHLEVEL 214
#define RUBY_PATCHLEVEL 215
#define RUBY_RELEASE_YEAR 2020
#define RUBY_RELEASE_MONTH 3