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
Updated by Anonymous almost 14 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r32768.
Kazuki, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
- vm.c: check if cfp is valid. [Bug #5083] [ruby-dev:44208]
Updated by ktsj (Kazuki Tsujimoto) almost 14 years ago
trunkと1.9.3にコミットしました。