Marshal will dump some object with singleton methods
The check for "dumpability" is incorrect:
o = Object.new def o.foo; end Marshal.dump(o) # => TypeError: singleton can't be dumped o.singleton_class.send :prepend, Enumerable Marshal.dump(o) # => "\x04\be:\x0FEnumerablee:\vObjecto;\x06\0", should fail
#2 Updated by Marc-Andre Lafortune about 1 year ago
My understanding is that objects whose singleton classes have included / prepended classes should be dumpable & loadable, but if the singleton class itself has proper instance methods it can't be dumped.
In the example I gave, the first TypeError is ok, since o's singleton class has a :foo method.
Prepending a module should not make it suddenly dumpable.
The check for this is in
w_extended is incorrect. If I'm not mistaken, it assumes that the singleton class is first in the ancestry chain, which is no longer necessarily the case.
#4 Updated by Nobuyoshi Nakada about 1 year ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r39650.
Marc-Andre, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
marshal.c: check for prepended
- marshal.c (w_extended): check for prepended object. [Bug #8043]
#6 Updated by Tomoyuki Chikanaga 11 months ago
- Status changed from Assigned to Closed