Issue #5083 has been reported by Kazuki Tsujimoto.
Bug #5083: cref/cbase取得時にSEGV
Author: Kazuki Tsujimoto
Status: Open
Priority: Normal
Assignee: Kazuki Tsujimoto
Category: core
Target version:
ruby -v: ruby 1.9.4dev (2011-07-23 trunk 32632) [x86_64-linux]
=begin
辻本です。
以下のコードでSEGVします。
$ ./ruby -e ‘Thread.new(&Module.method(:nesting)).join’
$ ./ruby -e ‘Thread.new(:to_s, &Module.method(:undef_method)).join’
それぞれrb_vm_cref/rb_vm_cbaseの中でrb_vm_get_ruby_level_next_cfpが0を返すケースに
対応できていないのが原因です。
類似の事例として[ruby-dev:34128]があるのですが、その際の対策にあわせて
Rubyレベルのcfpが存在しない場合はRuntimeErrorとする変更を取り込んでしまいたいと思います。
(パッチを添付します)
懸念点として、上記のコードは1.8系の場合はエラーが出ることなく動くので
このパッチを適用することで非互換が生じることになりますが、
すでに
$ ruby1.8 -e ‘Thread.new(“$“, &Object.method(:eval)).join’ # => No
error
$ ruby1.9 -e 'Thread.new(”$”, &Object.method(:eval)).join’ # => Can’t
eval on top of Fiber or Thread (RuntimeError)
という状況なので問題ないと思いますがどうでしょうか。
=end