Bug #11884
closedPsych.load broken for OpenStruct in Ruby 2.3.0
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
Updated by kaikuchn (Kai Kuchenbecker) almost 9 years ago
- Description updated (diff)
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
Updated by marcandre (Marc-Andre Lafortune) almost 9 years ago
- Has duplicate Bug #11966: YAML#load fails with OpenStruct object added
Updated by marcandre (Marc-Andre Lafortune) over 8 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
- File syck_error.log syck_error.log added
- File syck_error.rb syck_error.rb added
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.
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
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
- Related to Bug #13358: OpenStruct overriding allocate added