[前][次][番号順一覧][スレッド一覧]

ruby-changes:50529

From: nagachika <ko1@a...>
Date: Tue, 6 Mar 2018 01:11:35 +0900 (JST)
Subject: [ruby-changes:50529] nagachika:r62667 (ruby_2_4): merge revision(s) 60000, 60001, 60002: [Backport #13925]

nagachika	2018-03-06 01:11:30 +0900 (Tue, 06 Mar 2018)

  New Revision: 62667

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=62667

  Log:
    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@g...>
    
    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@g...>
    
    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@g...>.
      [Bug#13925] [Fix GH-1705]

  Modified directories:
    branches/ruby_2_4/
  Modified files:
    branches/ruby_2_4/string.c
    branches/ruby_2_4/test/ruby/test_string.rb
    branches/ruby_2_4/version.h
Index: ruby_2_4/string.c
===================================================================
--- ruby_2_4/string.c	(revision 62666)
+++ ruby_2_4/string.c	(revision 62667)
@@ -7255,7 +7255,7 @@ rb_str_split_m(int argc, VALUE *argv, VA https://github.com/ruby/ruby/blob/trunk/ruby_2_4/string.c#L7255
 	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;
     }
@@ -8928,7 +8928,7 @@ rb_str_partition(VALUE str, VALUE sep) https://github.com/ruby/ruby/blob/trunk/ruby_2_4/string.c#L8928
 	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;
@@ -8981,7 +8981,7 @@ rb_str_rpartition(VALUE str, VALUE sep) https://github.com/ruby/ruby/blob/trunk/ruby_2_4/string.c#L8981
 	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());
Index: ruby_2_4/version.h
===================================================================
--- ruby_2_4/version.h	(revision 62666)
+++ ruby_2_4/version.h	(revision 62667)
@@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_4/version.h#L1
 #define RUBY_VERSION "2.4.4"
 #define RUBY_RELEASE_DATE "2018-03-06"
-#define RUBY_PATCHLEVEL 251
+#define RUBY_PATCHLEVEL 252
 
 #define RUBY_RELEASE_YEAR 2018
 #define RUBY_RELEASE_MONTH 3
Index: ruby_2_4/test/ruby/test_string.rb
===================================================================
--- ruby_2_4/test/ruby/test_string.rb	(revision 62666)
+++ ruby_2_4/test/ruby/test_string.rb	(revision 62667)
@@ -1479,6 +1479,11 @@ CODE https://github.com/ruby/ruby/blob/trunk/ruby_2_4/test/ruby/test_string.rb#L1479
     }
   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(" ")))
@@ -2223,7 +2228,12 @@ CODE https://github.com/ruby/ruby/blob/trunk/ruby_2_4/test/ruby/test_string.rb#L2228
     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
@@ -2243,6 +2253,11 @@ CODE https://github.com/ruby/ruby/blob/trunk/ruby_2_4/test/ruby/test_string.rb#L2253
     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
Index: ruby_2_4
===================================================================
--- ruby_2_4	(revision 62666)
+++ ruby_2_4	(revision 62667)

Property changes on: ruby_2_4
___________________________________________________________________
Modified: svn:mergeinfo
## -0,0 +0,1 ##
   Merged /trunk:r60000-60002

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]