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

ruby-changes:12012

From: nobu <ko1@a...>
Date: Sat, 13 Jun 2009 09:58:47 +0900 (JST)
Subject: [ruby-changes:12012] Ruby:r23677 (trunk): * marshal.c (r_ivar): should not set internal encoding ivar as an

nobu	2009-06-13 09:58:30 +0900 (Sat, 13 Jun 2009)

  New Revision: 23677

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=23677

  Log:
    * marshal.c (r_ivar): should not set internal encoding ivar as an
      ordinary ivar.  [ruby-dev:38596]

  Modified files:
    trunk/ChangeLog
    trunk/marshal.c
    trunk/test/ruby/test_encoding.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 23676)
+++ ChangeLog	(revision 23677)
@@ -1,3 +1,8 @@
+Sat Jun 13 09:58:26 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* marshal.c (r_ivar): should not set internal encoding ivar as an
+	  ordinary ivar.  [ruby-dev:38596]
+
 Sat Jun 13 07:08:40 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* vm_eval.c (rb_f_local_variables): now returns symbols.  a patch from
Index: marshal.c
===================================================================
--- marshal.c	(revision 23676)
+++ marshal.c	(revision 23677)
@@ -1159,14 +1159,14 @@
 
     len = r_long(arg);
     if (len > 0) {
-	while (len--) {
+	do {
 	    ID id = r_symbol(arg);
 	    VALUE val = r_object(arg);
 	    if (id == rb_id_encoding()) {
 		int idx = rb_enc_find_index(StringValueCStr(val));
 		if (idx > 0) rb_enc_associate_index(obj, idx);
 	    }
-	    if (id == rb_intern("E")) {
+	    else if (id == rb_intern("E")) {
 		if (val == Qfalse) rb_enc_associate_index(obj, rb_usascii_encindex());
 		else if (val == Qtrue) rb_enc_associate_index(obj, rb_utf8_encindex());
 		/* bogus ignore */
@@ -1174,7 +1174,7 @@
 	    else {
 		rb_ivar_set(obj, id, val);
 	    }
-	}
+	} while (--len > 0);
     }
 }
 
Index: test/ruby/test_encoding.rb
===================================================================
--- test/ruby/test_encoding.rb	(revision 23676)
+++ test/ruby/test_encoding.rb	(revision 23677)
@@ -60,4 +60,12 @@
       assert_instance_of(String, v)
     end
   end
+
+  def test_marshal
+    str = "".force_encoding("EUC-JP")
+    str2 = Marshal.load(Marshal.dump(str))
+    assert_equal(str, str2)
+    str2 = Marshal.load(Marshal.dump(str2))
+    assert_equal(str, str2, '[ruby-dev:38596]')
+  end
 end

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

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