Issue #10685 has been updated by Nobuyoshi Nakada.

Status changed from Open to Closed
% Done changed from 0 to 100

Applied in changeset r49089.

----------
vm_args.c: add ref r49088

* vm_args.c (keyword_hash_p): fix non-symbol keys hash.
  rb_extract_keywords() returns 0 not Qnil when no symbol keys is
  included.  [ruby-core:67264] [Bug #10685]

----------------------------------------
Bug #10685: Segfault from keyword rest arg when coercing an object that defines to_hash 
https://bugs.ruby-lang.org/issues/10685#change-50737

* Author: Charles Nutter
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: core
* Target version: current: 2.2.0
* ruby -v: 2.2.0p0
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
This spec appears to cause the segfault mentioned in http://rubini.us/2014/12/31/matz-s-ruby-developers-don-t-use-rubyspec/ today.

```
    it "calls #to_hash on the last element if keyword arguments are present" do
      obj = mock("destructure block keyword arguments")
      obj.should_receive(:to_hash).and_return({x: 9})

      result = m([1, 2, 3, obj]) { |a, *b, c, **k| [a, b, c, k] }
      result.should == [1, [2], 3, {x: 9}]
    end
```

I tried to boil it down to a shorter example and was not able to isolate it from RubySpec/mspec entanglement.

Here's the full dump including the last spec line that starts to run (the spec above): https://gist.github.com/headius/5d52df923eb615729ca3

I ran it using mspec gem from rubyspec's "archive" branch using "mspec ci -f s language".





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