From 0cbfeb8210cd177bee95c512834c483daec36f74 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 28 Jun 2023 12:39:52 +0900 Subject: [Bug #19746] `String#index` with regexp should clear `$~` unless matched --- string.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'string.c') diff --git a/string.c b/string.c index d10eb236c9..555b0a1abd 100644 --- a/string.c +++ b/string.c @@ -3880,8 +3880,10 @@ rb_str_index_m(int argc, VALUE *argv, VALUE str) } if (RB_TYPE_P(sub, T_REGEXP)) { - if (pos > str_strlen(str, NULL)) + if (pos > str_strlen(str, NULL)) { + rb_backref_set(Qnil); return Qnil; + } pos = str_offset(RSTRING_PTR(str), RSTRING_END(str), pos, rb_enc_check(str, sub), single_byte_optimizable(str)); @@ -3989,8 +3991,10 @@ rb_str_byteindex_m(int argc, VALUE *argv, VALUE str) } if (RB_TYPE_P(sub, T_REGEXP)) { - if (pos > RSTRING_LEN(str)) + if (pos > RSTRING_LEN(str)) { + rb_backref_set(Qnil); return Qnil; + } if (rb_reg_search(sub, str, pos, 0) < 0) { return Qnil; } -- cgit v1.2.3