Project

General

Profile

This project is closed and read-only.

Actions

Backport #8043

closed

Marshal will dump some object with singleton methods

Backport #8043: Marshal will dump some object with singleton methods

Added by marcandre (Marc-Andre Lafortune) over 13 years ago. Updated over 13 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) over 13 years ago Actions #1 [ruby-core:53228]

  • Description updated (diff)

But extended objects are allowed, aren't they?

Updated by marcandre (Marc-Andre Lafortune) over 13 years ago Actions #2 [ruby-core:53239]

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) over 13 years ago Actions #3 [ruby-core:53247]

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

Updated by nobu (Nobuyoshi Nakada) over 13 years ago Actions #4

  • 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

Updated by nobu (Nobuyoshi Nakada) over 13 years ago Actions #5

  • Tracker changed from Bug to Backport
  • Project changed from Ruby to 15
  • Category deleted (core)
  • Status changed from Closed to Assigned
  • Assignee set to nagachika (Tomoyuki Chikanaga)
  • Target version deleted (2.1.0)

Updated by nagachika (Tomoyuki Chikanaga) over 13 years ago Actions #6

  • 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: PDF Atom