ruby-changes:23062
From: nobu <ko1@a...>
Date: Thu, 22 Mar 2012 23:15:15 +0900 (JST)
Subject: [ruby-changes:23062] nobu:r35112 (trunk): * transcode.c (str_encode_bang, encoded_dup): if nothing was
nobu 2012-03-22 23:14:39 +0900 (Thu, 22 Mar 2012) New Revision: 35112 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35112 Log: * transcode.c (str_encode_bang, encoded_dup): if nothing was transcoded, just set encoding but leave coderange unchanged as forcee_encoding. [ruby-core:43557][Bug #6190] Modified files: trunk/ChangeLog trunk/test/ruby/test_m17n.rb trunk/transcode.c Index: ChangeLog =================================================================== --- ChangeLog (revision 35111) +++ ChangeLog (revision 35112) @@ -1,3 +1,9 @@ +Thu Mar 22 23:14:36 2012 Nobuyoshi Nakada <nobu@r...> + + * transcode.c (str_encode_bang, encoded_dup): if nothing was + transcoded, just set encoding but leave coderange unchanged as + forcee_encoding. [ruby-core:43557][Bug #6190] + Thu Mar 22 22:30:44 2012 Hiroshi Shirosaki <h.shirosaki@g...> * io.c (static int io_fflush): add the definition. Index: test/ruby/test_m17n.rb =================================================================== --- test/ruby/test_m17n.rb (revision 35111) +++ test/ruby/test_m17n.rb (revision 35112) @@ -1410,6 +1410,14 @@ assert_equal(true, s.valid_encoding?) s << "\xff".force_encoding("utf-16be") assert_equal(false, s.valid_encoding?, bug4018) + + bug6190 = '[ruby-core:43557]' + s = "\xe9" + s = s.encode("utf-8", "utf-8") + assert_equal(false, s.valid_encoding?, bug6190) + s = "\xe9" + s.encode!("utf-8", "utf-8") + assert_equal(false, s.valid_encoding?, bug6190) end def test_getbyte Index: transcode.c =================================================================== --- transcode.c (revision 35111) +++ transcode.c (revision 35112) @@ -2785,6 +2785,10 @@ encidx = str_transcode(argc, argv, &newstr); if (encidx < 0) return str; + if (newstr == str) { + rb_enc_associate_index(str, encidx); + return str; + } rb_str_shared_replace(str, newstr); return str_encode_associate(str, encidx); } @@ -2871,6 +2875,8 @@ if (encidx < 0) return rb_str_dup(str); if (newstr == str) { newstr = rb_str_dup(str); + rb_enc_associate_index(newstr, encidx); + return newstr; } else { RBASIC(newstr)->klass = rb_obj_class(str); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/