diff options
-rw-r--r-- | marshal.c | 3 | ||||
-rw-r--r-- | test/ruby/test_marshal.rb | 4 |
2 files changed, 6 insertions, 1 deletions
@@ -422,6 +422,7 @@ w_symbol(VALUE sym, struct dump_arg *arg) w_long((long)num, arg); } else { + const VALUE orig_sym = sym; sym = rb_sym2str(sym); if (!sym) { rb_raise(rb_eTypeError, "can't dump anonymous ID %"PRIdVALUE, sym); @@ -436,7 +437,7 @@ w_symbol(VALUE sym, struct dump_arg *arg) } w_byte(TYPE_SYMBOL, arg); w_bytes(RSTRING_PTR(sym), RSTRING_LEN(sym), arg); - st_add_direct(arg->symbols, sym, arg->symbols->num_entries); + st_add_direct(arg->symbols, orig_sym, arg->symbols->num_entries); if (!NIL_P(encname)) { struct dump_call_arg c_arg; c_arg.limit = 1; diff --git a/test/ruby/test_marshal.rb b/test/ruby/test_marshal.rb index 0b7a121185..9b82d52233 100644 --- a/test/ruby/test_marshal.rb +++ b/test/ruby/test_marshal.rb @@ -248,6 +248,10 @@ class TestMarshal < Test::Unit::TestCase assert_equal(ary, Marshal.load(Marshal.dump(ary)), bug2548) end + def test_symlink + assert_include(Marshal.dump([:a, :a]), ';') + end + ClassUTF8 = eval("class R\u{e9}sum\u{e9}; self; end") iso_8859_1 = Encoding::ISO_8859_1 |