Bug #14314
Updated by jurriaan (Jurriaan Pruis) almost 7 years ago
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.