From: Kazuki Tsujimoto Date: 2011-07-31T11:59:57+09:00 Subject: [ruby-dev:44277] [Ruby 1.9 - Bug #5083] cref/cbase取得時にSEGV Issue #5083 has been updated by Kazuki Tsujimoto. trunkと1.9.3にコミットしました。 ---------------------------------------- Bug #5083: cref/cbase取得時にSEGV http://redmine.ruby-lang.org/issues/5083 Author: Kazuki Tsujimoto Status: Closed 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 -- http://redmine.ruby-lang.org