Project

General

Profile

Actions

Bug #11884

closed

Psych.load broken for OpenStruct in Ruby 2.3.0

Added by kaikuchn (Kai Kuchenbecker) almost 9 years ago. Updated over 8 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
[ruby-core:72501]

Description

Deserialising an OpenStruct through Psych::load results in a nil error since OpenStruct now has a respond_to_missing? method whose implementation references OpenStruct's @table instance variable.

To reproduce this issue simply use Psych to dump an OpenStruct and then load it again via Psych::load. I attached an example script that does exactly this. I have also attached the error output I get when running this script.

I'm not sure whether to assign marcandre or tenderlove... Please tell me if you need any further information.

Best regards,
Kai


Files

psych_error.rb (99 Bytes) psych_error.rb Script to reproduce error kaikuchn (Kai Kuchenbecker), 12/27/2015 12:40 AM
psych_error.log (1.54 KB) psych_error.log Error output of Psych.load for OpenStruct kaikuchn (Kai Kuchenbecker), 12/27/2015 12:40 AM
syck_error.rb (101 Bytes) syck_error.rb PSchambacher (Pierre Schambacher), 04/26/2016 05:56 PM
syck_error.log (635 Bytes) syck_error.log PSchambacher (Pierre Schambacher), 04/26/2016 05:56 PM

Related issues 4 (0 open4 closed)

Related to Ruby master - Bug #13358: OpenStruct overriding allocateClosedEregon (Benoit Daloze)Actions
Has duplicate Ruby master - Bug #11966: YAML#load fails with OpenStruct objectClosedActions
Has duplicate Ruby master - Bug #12140: Serialization of OpenStruct objects with YAML failsClosedActions
Has duplicate Ruby master - Bug #12349: Can't load OpenStruct with Syck with Ruby 2.3.xClosedtenderlovemaking (Aaron Patterson)Actions

Updated by kaikuchn (Kai Kuchenbecker) almost 9 years ago

  • Description updated (diff)
Actions #2

Updated by nobu (Nobuyoshi Nakada) almost 9 years ago

  • Status changed from Open to Closed

Applied in changeset r53366.


ostruct.rb: respond_to?

  • lib/ostruct.rb (OpenStruct): make respond_to? working on
    just-allocated objects for workaround of Psych.
    [ruby-core:72501] [Bug #11884]

Updated by nobu (Nobuyoshi Nakada) almost 9 years ago

  • Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONTNEED, 2.3: REQUIRED
Actions #4

Updated by marcandre (Marc-Andre Lafortune) almost 9 years ago

  • Has duplicate Bug #11966: YAML#load fails with OpenStruct object added
Actions #5

Updated by marcandre (Marc-Andre Lafortune) almost 9 years ago

  • Has duplicate Bug #12140: Serialization of OpenStruct objects with YAML fails added

Updated by naruse (Yui NARUSE) over 8 years ago

  • Backport changed from 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONTNEED, 2.3: REQUIRED to 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONTNEED, 2.3: DONE

ruby_2_3 r54387 merged revision(s) 53366.

Updated by PSchambacher (Pierre Schambacher) over 8 years ago

I'm sorry to re-open this but I'm getting a similar error with Syck and Ruby 2.3.1 just released
I attached a repro script and the log that I get when running it. Like psych, the @table instance variable of the OpenStruct isn't initialized when respond_to_missing? gets called.

Actions #8

Updated by marcandre (Marc-Andre Lafortune) over 8 years ago

  • Has duplicate Bug #12349: Can't load OpenStruct with Syck with Ruby 2.3.x added
Actions #9

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

  • Related to Bug #13358: OpenStruct overriding allocate added
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0