Backport #8043
closed
Marshal will dump some object with singleton methods
Added by marcandre (Marc-Andre Lafortune) about 11 years ago.
Updated almost 11 years ago.
Description
=begin
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
=end
- Description updated (diff)
But extended objects are allowed, aren't they?
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.
Thank you, I misread that `o' would be different object.
I'll fix it.
- 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
- Tracker changed from Bug to Backport
- Project changed from Ruby master to Backport200
- Category deleted (
core)
- Status changed from Closed to Assigned
- Assignee set to nagachika (Tomoyuki Chikanaga)
- Target version deleted (
2.1.0)
- Status changed from Assigned to Closed
This issue was solved with changeset r40087.
Marc-Andre, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
merge revision(s) 39650: [Backport #8043]
* marshal.c (w_extended): check for prepended object.
[ruby-core:53206] [Bug #8043]
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0