ruby-changes:68024
From: nagachika <ko1@a...>
Date: Sat, 18 Sep 2021 16:50:42 +0900 (JST)
Subject: [ruby-changes:68024] 3e61556191 (ruby_3_0): merge revision(s) 99d8c4832a7133ca52578d015e3ddcfd94820f4a: [Backport #18160]
https://git.ruby-lang.org/ruby.git/commit/?id=3e61556191 From 3e61556191ea7e6586ffb995f03e6d2631ec6fb0 Mon Sep 17 00:00:00 2001 From: nagachika <nagachika@r...> Date: Sat, 18 Sep 2021 16:13:38 +0900 Subject: merge revision(s) 99d8c4832a7133ca52578d015e3ddcfd94820f4a: [Backport #18160] Preserve the encoding of the argument in IndexError [Bug #18160] --- re.c | 20 ++++++++++---------- test/ruby/test_regexp.rb | 7 ++++++- 2 files changed, 16 insertions(+), 11 deletions(-) --- re.c | 20 ++++++++++---------- test/ruby/test_regexp.rb | 7 ++++++- version.h | 2 +- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/re.c b/re.c index a56b483..f3e8954 100644 --- a/re.c +++ b/re.c @@ -1151,6 +1151,14 @@ match_size(VALUE match) https://github.com/ruby/ruby/blob/trunk/re.c#L1151 } static int name_to_backref_number(struct re_registers *, VALUE, const char*, const char*); +NORETURN(static void name_to_backref_error(VALUE name)); + +static void +name_to_backref_error(VALUE name) +{ + rb_raise(rb_eIndexError, "undefined group name reference: % "PRIsVALUE, + name); +} static int match_backref_number(VALUE match, VALUE backref) @@ -1170,10 +1178,10 @@ match_backref_number(VALUE match, VALUE backref) https://github.com/ruby/ruby/blob/trunk/re.c#L1178 } name = StringValueCStr(backref); - num = name_to_backref_number(regs, regexp, name, name + strlen(name)); + num = name_to_backref_number(regs, regexp, name, name + RSTRING_LEN(backref)); if (num < 1) { - rb_raise(rb_eIndexError, "undefined group name reference: %s", name); + name_to_backref_error(backref); } return num; @@ -1928,14 +1936,6 @@ name_to_backref_number(struct re_registers *regs, VALUE regexp, const char* name https://github.com/ruby/ruby/blob/trunk/re.c#L1936 (const unsigned char *)name, (const unsigned char *)name_end, regs); } -NORETURN(static void name_to_backref_error(VALUE name)); -static void -name_to_backref_error(VALUE name) -{ - rb_raise(rb_eIndexError, "undefined group name reference: % "PRIsVALUE, - name); -} - #define NAME_TO_NUMBER(regs, re, name, name_ptr, name_end) \ (NIL_P(re) ? 0 : \ !rb_enc_compatible(RREGEXP_SRC(re), (name)) ? 0 : \ diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb index a9e0cdf..bc98170 100644 --- a/test/ruby/test_regexp.rb +++ b/test/ruby/test_regexp.rb @@ -694,11 +694,16 @@ class TestRegexp < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_regexp.rb#L694 test = proc {|&blk| "abc".sub("a", ""); blk.call($~) } bug10877 = '[ruby-core:68209] [Bug #10877]' + bug18160 = '[Bug #18160]' test.call {|m| assert_raise_with_message(IndexError, /foo/, bug10877) {m["foo"]} } key = "\u{3042}" [Encoding::UTF_8, Encoding::Shift_JIS, Encoding::EUC_JP].each do |enc| idx = key.encode(enc) - test.call {|m| assert_raise_with_message(IndexError, /#{idx}/, bug10877) {m[idx]} } + pat = /#{idx}/ + test.call {|m| assert_raise_with_message(IndexError, pat, bug10877) {m[idx]} } + test.call {|m| assert_raise_with_message(IndexError, pat, bug18160) {m.offset(idx)} } + test.call {|m| assert_raise_with_message(IndexError, pat, bug18160) {m.begin(idx)} } + test.call {|m| assert_raise_with_message(IndexError, pat, bug18160) {m.end(idx)} } end test.call {|m| assert_equal(/a/, m.regexp) } test.call {|m| assert_equal("abc", m.string) } diff --git a/version.h b/version.h index 9744964..470841c 100644 --- a/version.h +++ b/version.h @@ -12,7 +12,7 @@ https://github.com/ruby/ruby/blob/trunk/version.h#L12 # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 3 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 135 +#define RUBY_PATCHLEVEL 136 #define RUBY_RELEASE_YEAR 2021 #define RUBY_RELEASE_MONTH 9 -- cgit v1.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/