diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-09-11 21:43:11 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-09-12 11:16:51 +0900 |
commit | 99d8c4832a7133ca52578d015e3ddcfd94820f4a (patch) | |
tree | 15442cba75ee31bc49f8efd133d2e1ac0e4d951c /re.c | |
parent | 83a5e2bb5c1b9f24b70dc30c50b5deb4d7232119 (diff) |
Preserve the encoding of the argument in IndexError [Bug #18160]
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4822
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 20 |
1 files changed, 10 insertions, 10 deletions
@@ -1150,6 +1150,14 @@ match_size(VALUE match) } 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) @@ -1169,10 +1177,10 @@ match_backref_number(VALUE match, VALUE backref) } 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; @@ -1924,14 +1932,6 @@ name_to_backref_number(struct re_registers *regs, VALUE regexp, const char* name (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 : \ |