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

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/

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