From ab9c982cc0299435a795000d68eb9472d8ecfde0 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 27 Mar 2012 04:13:54 +0000 Subject: * string.c (str_new_empty): should copy also the encoding as an empty substring. [ruby-dev:45441][Bug #6206] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35146 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ string.c | 1 + test/ruby/test_string.rb | 20 ++++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/ChangeLog b/ChangeLog index afb31cf5ee..95fa1f66d8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Mar 27 13:13:51 2012 Nobuyoshi Nakada + + * string.c (str_new_empty): should copy also the encoding as an + empty substring. [ruby-dev:45441][Bug #6206] + Mon Mar 26 23:43:04 2012 Shugo Maeda * lib/net/ftp.rb (parse227, parse228, parse229): don't use $~. diff --git a/string.c b/string.c index 7d865d669a..e16b4291d8 100644 --- a/string.c +++ b/string.c @@ -726,6 +726,7 @@ static VALUE str_new_empty(VALUE str) { VALUE v = rb_str_new5(str, 0, 0); + rb_enc_copy(v, str); OBJ_INFECT(v, str); return v; } diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb index 27cb3a2552..9cc193ce41 100644 --- a/test/ruby/test_string.rb +++ b/test/ruby/test_string.rb @@ -1174,6 +1174,12 @@ class TestString < Test::Unit::TestCase assert_equal("[2, 3]", [1,2,3].slice!(1,10000).inspect, "moved from btest/knownbug") + bug6206 = '[ruby-dev:45441]' + Encoding.list.each do |enc| + next unless enc.ascii_compatible? + s = S("a:".force_encoding(enc)) + assert_equal([enc]*2, s.split(":", 2).map(&:encoding), bug6206) + end end def test_squeeze @@ -1824,6 +1830,13 @@ class TestString < Test::Unit::TestCase assert_raise(TypeError) { "hello".partition(1) } def (hyphen = Object.new).to_str; "-"; end assert_equal(%w(foo - bar), "foo-bar".partition(hyphen), '[ruby-core:23540]') + + bug6206 = '[ruby-dev:45441]' + Encoding.list.each do |enc| + next unless enc.ascii_compatible? + s = S("a:".force_encoding(enc)) + assert_equal([enc]*3, s.partition("|").map(&:encoding), bug6206) + end end def test_rpartition @@ -1832,6 +1845,13 @@ class TestString < Test::Unit::TestCase assert_raise(TypeError) { "hello".rpartition(1) } def (hyphen = Object.new).to_str; "-"; end assert_equal(%w(foo - bar), "foo-bar".rpartition(hyphen), '[ruby-core:23540]') + + bug6206 = '[ruby-dev:45441]' + Encoding.list.each do |enc| + next unless enc.ascii_compatible? + s = S("a:".force_encoding(enc)) + assert_equal([enc]*3, s.rpartition("|").map(&:encoding), bug6206) + end end def test_setter -- cgit v1.2.3