ruby-changes:33593
From: naruse <ko1@a...>
Date: Wed, 23 Apr 2014 03:44:56 +0900 (JST)
Subject: [ruby-changes:33593] naruse:r45674 (trunk): Revert r45670 "stringio.c: use rb_str_append"
naruse 2014-04-23 03:44:48 +0900 (Wed, 23 Apr 2014) New Revision: 45674 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=45674 Log: Revert r45670 "stringio.c: use rb_str_append" It breaks test-all. http://u64b.rubyci.org/~chkbuild/ruby-trunk/log/20140422T143301Z.diff.html.gz rb_str_conv_enc() return original string for example when from ASCII-8BIT to UTF-8 with non ASCII strings Modified files: trunk/ChangeLog trunk/ext/stringio/stringio.c trunk/test/stringio/test_stringio.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 45673) +++ ChangeLog (revision 45674) @@ -13,12 +13,6 @@ Tue Apr 22 23:56:24 2014 NAKAMURA Usaku https://github.com/ruby/ruby/blob/trunk/ChangeLog#L13 * configure.in (fstatfs): check it. -Tue Apr 22 23:14:28 2014 Nobuyoshi Nakada <nobu@r...> - - * ext/stringio/stringio.c (strio_write): use rb_str_append to - reuse coderange bits and keep taintedness. - [ruby-dev:48118] [Bug #9769] - Tue Apr 22 22:15:51 2014 NAKAMURA Usaku <usa@r...> * file.c (rb_io_statfs): need to define even if the system doesn't have Index: ext/stringio/stringio.c =================================================================== --- ext/stringio/stringio.c (revision 45673) +++ ext/stringio/stringio.c (revision 45674) @@ -1170,6 +1170,7 @@ strio_write(VALUE self, VALUE str) https://github.com/ruby/ruby/blob/trunk/ext/stringio/stringio.c#L1170 long len, olen; rb_encoding *enc, *enc2; + RB_GC_GUARD(str); if (!RB_TYPE_P(str, T_STRING)) str = rb_obj_as_string(str); enc = rb_enc_get(ptr->string); @@ -1185,7 +1186,7 @@ strio_write(VALUE self, VALUE str) https://github.com/ruby/ruby/blob/trunk/ext/stringio/stringio.c#L1186 ptr->pos = olen; } if (ptr->pos == olen) { - rb_str_append(ptr->string, str); + rb_enc_str_buf_cat(ptr->string, RSTRING_PTR(str), len, enc); } else { strio_extend(ptr, ptr->pos, len); @@ -1193,7 +1194,6 @@ strio_write(VALUE self, VALUE str) https://github.com/ruby/ruby/blob/trunk/ext/stringio/stringio.c#L1194 OBJ_INFECT(ptr->string, str); } OBJ_INFECT(ptr->string, self); - RB_GC_GUARD(str); ptr->pos += len; return LONG2NUM(len); } Index: test/stringio/test_stringio.rb =================================================================== --- test/stringio/test_stringio.rb (revision 45673) +++ test/stringio/test_stringio.rb (revision 45674) @@ -119,17 +119,6 @@ class TestStringIO < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/test/stringio/test_stringio.rb#L119 f.close unless f.closed? end - def test_write_infection - bug9769 = '[ruby-dev:48118] [Bug #9769]' - s = "".untaint - f = StringIO.new(s, "w") - f.print("bar".taint) - f.close - assert_predicate(s, :tainted?, bug9769) - ensure - f.close unless f.closed? - end - def test_mode_error f = StringIO.new("", "r") assert_raise(IOError) { f.write("foo") } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/