summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-13 00:58:30 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-13 00:58:30 +0000
commitd70719b0614f8624020f8cdc561a426a45cdda1b (patch)
tree8b381f9b6e6e32f71c362ae83b91c634a264154b
parent4150c2c05dff1a034af010bb6a6c11ad9abd05ac (diff)
* marshal.c (r_ivar): should not set internal encoding ivar as an
ordinary ivar. [ruby-dev:38596] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23677 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--marshal.c6
-rw-r--r--test/ruby/test_encoding.rb8
3 files changed, 16 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 1c17105ac0..639f5b0685 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Jun 13 09:58:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * 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@ruby-lang.org>
* vm_eval.c (rb_f_local_variables): now returns symbols. a patch from
diff --git a/marshal.c b/marshal.c
index 807a0335a2..d67168db97 100644
--- a/marshal.c
+++ b/marshal.c
@@ -1159,14 +1159,14 @@ r_ivar(VALUE obj, struct load_arg *arg)
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 @@ r_ivar(VALUE obj, struct load_arg *arg)
else {
rb_ivar_set(obj, id, val);
}
- }
+ } while (--len > 0);
}
}
diff --git a/test/ruby/test_encoding.rb b/test/ruby/test_encoding.rb
index 6e442b564b..6edad2418f 100644
--- a/test/ruby/test_encoding.rb
+++ b/test/ruby/test_encoding.rb
@@ -60,4 +60,12 @@ class TestEncoding < Test::Unit::TestCase
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