diff --git a/string.c b/string.c index 6cf76e4fd4..ad19595f67 100644 --- a/string.c +++ b/string.c @@ -9177,7 +9177,7 @@ rb_str_rpartition(VALUE str, VALUE sep) pos = rb_str_rindex(str, sep, pos); } if (pos < 0) { - return rb_ary_new3(3, str_new_empty(str), str_new_empty(str), str); + return rb_ary_new3(3, str_new_empty(str), str_new_empty(str), rb_str_dup(str)); } if (regex) { sep = rb_reg_nth_match(0, rb_backref_get()); diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb index b90c620381..08dc806380 100644 --- a/test/ruby/test_string.rb +++ b/test/ruby/test_string.rb @@ -2445,6 +2445,11 @@ CODE bug8138 = '[ruby-dev:47183]' assert_equal(["\u30E6\u30FC\u30B6@\u30C9\u30E1", ".", "\u30A4\u30F3"], "\u30E6\u30FC\u30B6@\u30C9\u30E1.\u30A4\u30F3".rpartition(/[@.]/), bug8138) + + bug = '[ruby-core:82911]' + hello = "hello" + hello.rpartition("hi").map(&:upcase!) + assert_equal("hello", hello, bug) end def test_setter