[ruby-core:70070] [Ruby trunk - Bug #11382] Keyword arguments randomly nullified

From: milovan.zogovic@...
Date: 2015-07-21 15:03:52 UTC
List: ruby-core #70070
Issue #11382 has been updated by Milovan Zogovic.

Subject changed from Keyword arguments nullified on inheritance to Keyword arguments randomly nullified

Actually, this has nothing to do with inheritance. Here is simplified example:

~~~
class Bug
  def initialize(a:, b: nil, **others)
    puts("a: #{a.inspect}, b: #{b.inspect}, others: #{others}")
  end
end

require "yaml"

Bug.new(**YAML.load("---\n:a: A\n:b: B\n:cc: CC")) # :b gets nullified
Bug.new(**YAML.load("---\n:a: A\n:b: B\n:c: C")) # :b not nullified
~~~

----------------------------------------
Bug #11382: Keyword arguments randomly nullified
https://bugs.ruby-lang.org/issues/11382#change-53485

* Author: Milovan Zogovic
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: 2.2.2
* Backport: 
----------------------------------------
Here is the example:

~~~
class Parent
  def initialize(a: nil, b: nil, **properties)
    puts("parent: { a: #{a.inspect}, b: #{b.inspect}, properties: #{properties}")
  end
end


class Child < Parent
  def initialize(args={})
    puts("child: #{args}")
    super
  end
end

require "yaml"
Child.new(a: "A", **YAML.load("---\n:b: B\n:x: X"))   # ok
Child.new(a: "A", **YAML.load("---\n:b: B\n:xx: XX")) # bug: ":a" gets nullified
~~~


The output is:

~~~
child: {:a=>"A", :b=>"B", :x=>"X"}
parent: { a: "A", b: "B", properties: {:x=>"X"}

child: {:a=>"A", :b=>"B", :xx=>"XX"}
parent: { a: "A", b: nil, properties: {:xx=>"XX"}
~~~

The only difference between first and second example is that the second one uses :xx as extra argument, while the first one uses :x. 
The bug will appear randomly based on the argument name.
Also, this only happens when  when the arguments are loaded from somewhere else (e.g. YAML.load).
If i put `{ b: "B", xx: "XX" }` just anywhere in the code, the bug won't happen, which is extra weird.

It works with ruby 2.1, and 2.0.





-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next