Project

General

Profile

Actions

Backport #8043

closed

Marshal will dump some object with singleton methods

Added by marcandre (Marc-Andre Lafortune) about 11 years ago. Updated about 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

Updated by nobu (Nobuyoshi Nakada) about 11 years ago

  • Description updated (diff)

But extended objects are allowed, aren't they?

Updated by marcandre (Marc-Andre Lafortune) about 11 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 11 years ago

Thank you, I misread that `o' would be different object.
I'll fix it.

Actions #4

Updated by nobu (Nobuyoshi Nakada) about 11 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

Actions #5

Updated by nobu (Nobuyoshi Nakada) about 11 years ago

  • 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)
Actions #6

Updated by nagachika (Tomoyuki Chikanaga) about 11 years ago

  • 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]
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0