Issue #9150 has been updated by zzak (Zachary Scott).

Status changed from Open to Assigned
Assignee set to nagachika (Tomoyuki Chikanaga)

@nagachika What do you think?
----------------------------------------
Bug #9150: Segfault in case statement execution, possibly related to refinements
https://bugs.ruby-lang.org/issues/9150#change-43202

Author: bradleybuda (Bradley Buda)
Status: Assigned
Priority: Normal
Assignee: nagachika (Tomoyuki Chikanaga)
Category: 
Target version: 
ruby -v: ruby 2.0.0p353 (2013-11-22 revision 43783) [x86_64-darwin13.0.0]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


This code consistently segfaults in 2.0.0p353:

require 'active_support/all'

case 3600
when 1.week then true
end

This is after `gem install activesupport --version=3.2.13`. The code works fine in 2.0.0p247.

I ran a git bisect between the two patches and I've narrowed it down to this change: https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/42869 . I don't know enough about ruby's internals to debug this any further, but according to LLDB the problem is a null pointer dereference in vm_eval.c:

 141  {
 142      VALUE ret;
 143
 144      if (!ci->me->def) return Qnil;
 145
 146      if (th->passed_block) {
 147          ci->blockptr = (rb_block_t *)th->passed_block;

ci->me is null on line 144.

I can reproduce this error on both OSX and Linux. Let me know if I can provide any more info to help debug this.


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