summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-03-18 15:00:46 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-03-18 15:00:46 +0000
commit1816ba09227bd92e0ed3127cbbd9cfff9363341b (patch)
treea56a450181a7b6533bc248968a980ff31c04a81d
parent4afc46dc8c62b718b48f2108ed44570d97e0f9ad (diff)
merge revision(s) 60000,60001,60002: [Backport #13925]
dup String#partition return value * string.c (rb_str_partition): return duplicated receiver, when no splits. [ruby-core:82911] [Bug#13925] Author: Seiei Miyagi <hanachin@gmail.com> dup String#rpartition return value * string.c (rb_str_rpartition): return duplicated receiver, when no splits. [ruby-core:82911] [Bug#13925] Author: Seiei Miyagi <hanachin@gmail.com> dup String#split return value * string.c (rb_str_split): return duplicated receiver, when no splits. patched by tompng (tomoya ishida) in [ruby-core:82911], and the test case by Seiei Miyagi <hanachin@gmail.com>. [Bug#13925] [Fix GH-1705] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@62818 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog22
-rw-r--r--string.c6
-rw-r--r--test/ruby/test_string.rb17
-rw-r--r--version.h2
4 files changed, 42 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 4f5680ce06..0adc80368f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+Sun Mar 18 23:59:32 2018 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ dup String#partition return value
+
+ * string.c (rb_str_partition): return duplicated receiver, when no
+ splits. [Bug#13925]
+
+ Author: Seiei Miyagi hanachin@gmail.com
+
+ dup String#rpartition return value
+
+ * string.c (rb_str_rpartition): return duplicated receiver, when no
+ splits. [Bug#13925]
+
+ Author: Seiei Miyagi hanachin@gmail.com
+
+ dup String#split return value
+
+ * string.c (rb_str_split): return duplicated receiver, when no splits.
+ patched by tompng (tomoya ishida) in , and the test case by Seiei
+ Miyagi hanachin@gmail.com. [Bug#13925] [Fix GH-1705]
+
Sun Mar 18 23:57:32 2018 Nobuyoshi Nakada <nobu@ruby-lang.org>
ruby.c: paragraph mode by -00
diff --git a/string.c b/string.c
index 52e3e0b07e..84533e7efe 100644
--- a/string.c
+++ b/string.c
@@ -6836,7 +6836,7 @@ rb_str_split_m(int argc, VALUE *argv, VALUE str)
else if (lim == 1) {
if (RSTRING_LEN(str) == 0)
return rb_ary_new2(0);
- return rb_ary_new3(1, str);
+ return rb_ary_new3(1, rb_str_dup(str));
}
i = 1;
}
@@ -8442,7 +8442,7 @@ rb_str_partition(VALUE str, VALUE sep)
pos = rb_reg_search(sep, str, 0, 0);
if (pos < 0) {
failed:
- return rb_ary_new3(3, str, str_new_empty(str), str_new_empty(str));
+ return rb_ary_new3(3, rb_str_dup(str), str_new_empty(str), str_new_empty(str));
}
sep = rb_str_subpat(str, sep, INT2FIX(0));
if (pos == 0 && RSTRING_LEN(sep) == 0) goto failed;
@@ -8495,7 +8495,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 a0584e26bf..f61aa3e2c4 100644
--- a/test/ruby/test_string.rb
+++ b/test/ruby/test_string.rb
@@ -1362,6 +1362,11 @@ class TestString < Test::Unit::TestCase
}
end
+ def test_split_dupped
+ s = "abc"
+ s.split("b", 1).map(&:upcase!)
+ assert_equal("abc", s)
+ end
def test_squeeze
assert_equal(S("abc"), S("aaabbbbccc").squeeze)
assert_equal(S("aa bb cc"), S("aa bb cc").squeeze(S(" ")))
@@ -2051,7 +2056,12 @@ class TestString < Test::Unit::TestCase
end
assert_equal(["\u30E6\u30FC\u30B6", "@", "\u30C9\u30E1.\u30A4\u30F3"],
- "\u30E6\u30FC\u30B6@\u30C9\u30E1.\u30A4\u30F3".partition(/[@.]/))
+ "\u30E6\u30FC\u30B6@\u30C9\u30E1.\u30A4\u30F3".partition(/[@.]/))
+
+ bug = '[ruby-core:82911]'
+ hello = "hello"
+ hello.partition("hi").map(&:upcase!)
+ assert_equal("hello", hello, bug)
end
def test_rpartition
@@ -2071,6 +2081,11 @@ class TestString < Test::Unit::TestCase
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
diff --git a/version.h b/version.h
index 34aa3424c0..f3f5638a60 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.3.7"
#define RUBY_RELEASE_DATE "2018-03-18"
-#define RUBY_PATCHLEVEL 419
+#define RUBY_PATCHLEVEL 420
#define RUBY_RELEASE_YEAR 2018
#define RUBY_RELEASE_MONTH 3