Project

General

Profile

Actions

Bug #5083

closed

cref/cbase取得時にSEGV

Added by ktsj (Kazuki Tsujimoto) almost 13 years ago. Updated over 12 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 1.9.4dev (2011-07-23 trunk 32632) [x86_64-linux]
Backport:
[ruby-dev:44208]

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

fix-to-check-cfp.patch (1017 Bytes) fix-to-check-cfp.patch ktsj (Kazuki Tsujimoto), 07/23/2011 10:03 AM
Actions

Also available in: Atom PDF

Like0
Like0Like0