Actions
Bug #5083
closedcref/cbase取得時にSEGV
Description
=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
Files
Actions
Like0
Like0Like0