summaryrefslogtreecommitdiff
path: root/re.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-09-11 21:43:11 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-09-12 11:16:51 +0900
commit99d8c4832a7133ca52578d015e3ddcfd94820f4a (patch)
tree15442cba75ee31bc49f8efd133d2e1ac0e4d951c /re.c
parent83a5e2bb5c1b9f24b70dc30c50b5deb4d7232119 (diff)
downloadruby-99d8c4832a7133ca52578d015e3ddcfd94820f4a.tar.gz
Preserve the encoding of the argument in IndexError [Bug #18160]
Diffstat (limited to 're.c')
-rw-r--r--re.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/re.c b/re.c
index e4c98ebb72..4840ce070f 100644
--- a/re.c
+++ b/re.c
@@ -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 : \