Project

General

Profile

Bug #14314

Updated by jurriaan (Jurriaan Pruis) over 2 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. 

Back