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
Updated by marcandre (Marc-Andre Lafortune) about 7 years 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.
Updated by nobu (Nobuyoshi Nakada) about 7 years 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. [ruby-core:53206] [Bug #8043]
Updated by nagachika (Tomoyuki Chikanaga) about 7 years ago
- Status changed from Assigned to Closed