diff options
-rw-r--r-- | string.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -7522,7 +7522,6 @@ rb_str_rpartition(VALUE str, VALUE sep) if (RB_TYPE_P(sep, T_REGEXP)) { pos = rb_reg_search(sep, str, pos, 1); - pos = rb_str_sublen(str, pos); regex = TRUE; } else { @@ -7543,9 +7542,13 @@ rb_str_rpartition(VALUE str, VALUE sep) if (regex) { sep = rb_reg_nth_match(0, rb_backref_get()); } - return rb_ary_new3(3, rb_str_substr(str, 0, pos), + else { + pos = rb_str_offset(str, pos); + } + return rb_ary_new3(3, rb_str_subseq(str, 0, pos), sep, - rb_str_substr(str,pos+str_strlen(sep,STR_ENC_GET(sep)),RSTRING_LEN(str))); + rb_str_subseq(str, pos+RSTRING_LEN(sep), + RSTRING_LEN(str)-pos-RSTRING_LEN(sep))); } /* |