Actions
Bug #14314
closedMarshalling broken in Ruby 2.5.0 for Structs with keyword_init: true
Description
Steps to reproduce:
irb(main):001:0> Foo = Struct.new(:foo)
=> Foo
irb(main):002:0> Marshal.load(Marshal.dump(Foo.new('a')))
=> #<struct Foo foo="a">
irb(main):003:0> Bar = Struct.new(:bar, keyword_init: true)
=> Bar(keyword_init: true)
irb(main):004:0> Marshal.load(Marshal.dump(Bar.new(bar: 'a')))
Traceback (most recent call last):
3: from /home/jurriaan/.rubies/ruby-2.5.0/bin/irb:11:in `<main>'
2: from (irb):4
1: from (irb):4:in `load'
ArgumentError (wrong number of arguments (given 1, expected 0))
I expected the keyword_init: true struct to unmarshal correctly.
This issue is caused by marshal.c calling the struct initializer with regular arguments instead of keyword arguments.
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0