[#54738] [ruby-trunk - Bug #8358][Open] TestSprintf#test_float test failuer on mingw32 — "phasis68 (Heesob Park)" <phasis@...>

36 messages 2013/05/02

[#54749] [ruby-trunk - Feature #8361][Open] Alternative syntax for block parameter — "alexeymuranov (Alexey Muranov)" <redmine@...>

12 messages 2013/05/02

[#54798] [ruby-trunk - Bug #8370][Open] Constants MAX_MULTIPART_LENGTH in cgi\core.rb — "xibbar (Takeyuki FUJIOKA)" <xibbar@...>

17 messages 2013/05/05

[#54850] [ruby-trunk - Feature #8377][Open] Deprecate :: for method calls in 2.1 — "charliesome (Charlie Somerville)" <charliesome@...>

27 messages 2013/05/07

[#54881] [ruby-trunk - Bug #8384][Open] Cannot build ruby against OpenSSL build with "no-ec2m" — "vo.x (Vit Ondruch)" <v.ondruch@...>

16 messages 2013/05/09

[#54921] [ruby-trunk - Bug #8393][Open] A class who's parent class is in a module can go wrong if files are required in the wrong order — "eLobato (Daniel Lobato Garcia)" <elobatocs@...>

15 messages 2013/05/12

[#54939] [ruby-trunk - Bug #8399][Open] Remove usage of RARRAY_PTR in C extensions when not needed — "dbussink (Dirkjan Bussink)" <d.bussink@...>

32 messages 2013/05/12

[#55053] [ruby-trunk - Feature #8426][Open] Implement class hierarchy method caching — "charliesome (Charlie Somerville)" <charliesome@...>

21 messages 2013/05/19

[#55096] [ruby-trunk - Feature #8430][Open] Rational number literal — "mrkn (Kenta Murata)" <muraken@...>

28 messages 2013/05/21

[#55197] [ruby-trunk - Feature #8461][Open] Easy way to disable certificate checking in XMLRPC::Client — "herwinw (Herwin Weststrate)" <herwin@...>

11 messages 2013/05/29

[ruby-core:54748] [Backport 200 - Backport #8276] Marshal.load modifies restored object after calling #marshal_load

From: "nagachika (Tomoyuki Chikanaga)" <nagachika00@...>
Date: 2013-05-02 16:37:05 UTC
List: ruby-core #54748
Issue #8276 has been updated by nagachika (Tomoyuki Chikanaga).


r40559 seems a related commit.
----------------------------------------
Backport #8276: Marshal.load modifies restored object after calling #marshal_load 
https://bugs.ruby-lang.org/issues/8276#change-39091

Author: Eregon (Benoit Daloze)
Status: Assigned
Priority: Normal
Assignee: nagachika (Tomoyuki Chikanaga)
Category: 
Target version: 


Given this code, a simple class freezing instances on creation (so they are immutable):

class T
  def initialize(data)
    @data = data
    freeze
  end

  def marshal_dump
    @data
  end

  def marshal_load data
    initialize(data)
  end
end

t = T.new("dd")
s = Marshal.dump(t)
p Marshal.load(s) # =>  ...:in `load': can't modify frozen T (RuntimeError)


Freezing on creation from Marshal is needed to ensure immutability and it seems the right place to do it.
It used to work (ruby 2.0.0dev (2012-07-15 trunk 36395) [x86_64-darwin10.8.0] did fine).
The backtrace:

(gdb) bt
#0  rb_raise (exc=4304355040, fmt=0x1001be828 "can't modify frozen %s") at error.c:1810
#1  0x000000010004344f in rb_error_frozen (what=<value temporarily unavailable, due to optimizations>) at error.c:2020
#2  0x0000000100004600 in rb_enc_associate_index (obj=<value temporarily unavailable, due to optimizations>, idx=1) at encoding.c:749
#3  0x000000010008233b in r_ivar (obj=4320803800, has_encoding=0x0, arg=0x1006b84b0) at marshal.c:1374
#4  0x00000001000811f1 in r_object0 (arg=0x1006b84b0, ivp=<value temporarily unavailable, due to optimizations>, extmod=8) at marshal.c:1475
#5  0x00000001000821ad in r_object [inlined] () at /Users/benoitdaloze/EREGONMS/Ruby/git/ruby/marshal.c:1890
#6  0x00000001000821ad in marshal_load (argc=<value temporarily unavailable, due to optimizations>, argv=<value temporarily unavailable, due to optimizations>) at marshal.c:1978
...


-- 
http://bugs.ruby-lang.org/

In This Thread