summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--string.c2
-rw-r--r--test/ruby/test_string.rb5
2 files changed, 6 insertions, 1 deletions
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