From: chris@... Date: 2015-01-01T00:14:15+00:00 Subject: [ruby-core:67267] [ruby-trunk - Bug #10685] Segfault from keyword rest arg when coercing an object that defines to_hash Issue #10685 has been updated by Chris Seaton. I think this is the equivalent code extracted from MSpec. But I can't get this to crash on 2.2.0p0. `def m(a) yield a end class Mock def to_hash puts 'to_hash called' {x: 9} end end obj = Mock.new result = m([1, 2, 3, obj]) { |a, *b, c, **k| [a, b, c, k] } p result#.should == [1, [2], 3, {x: 9}] p result == [1, [2], 3, {x: 9}]` ---------------------------------------- Bug #10685: Segfault from keyword rest arg when coercing an object that defines to_hash https://bugs.ruby-lang.org/issues/10685#change-50733 * Author: Charles Nutter * Status: Open * 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/