From: "tarui (Masaya Tarui)" Date: 2012-12-21T20:14:41+09:00 Subject: [ruby-dev:46786] [ruby-trunk - Bug #7597][Open] $0を変更するとbug_reportでsegvする Issue #7597 has been reported by tarui (Masaya Tarui). ---------------------------------------- Bug #7597: $0を変更するとbug_reportでsegvする https://bugs.ruby-lang.org/issues/7597 Author: tarui (Masaya Tarui) Status: Open Priority: Normal Assignee: Category: core Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux] rb_vm_bugreport(void)の中で backtrace_symbols(trace, n)が ruby本体の代わりに$0で変更した名前を引っ張って来ています。 それがrb_dump_backtrace_with_lines(n, trace, syms);の中でelf形式の実行ファイルだと思い込んで処理をしてしまっており、 正しく処理されずに誤ったヘッダー情報を元にポインタ操作を行いsegv等します。 minitest中にsegvしたりrb_bugしたりすると、思いっきりこれをふむ事になります。 例えば[Bug #7590]。 抜本的な対策はまだよくわからないのですが、一時的に、 rb_dump_backtrace_with_linesを使わないようにしておくべきかなと思います。 $ cat t.rb "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" #dummy header:-) $0=__FILE__ require 'dl' p DL::CPtr.new(4)[0] $ ruby t.rb DL is deprecated, please use Fiddle t.rb:4: [BUG] Segmentation fault ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux] -- Control frame information ----------------------------------------------- c:0003 p:---- s:0009 e:000008 CFUNC :[] c:0002 p:0033 s:0005 e:001578 EVAL t.rb:4 [FINISH] c:0001 p:0000 s:0002 e:000c08 TOP [FINISH] t.rb:4:in `
' t.rb:4:in `[]' -- C level backtrace information ------------------------------------------- Segmentation fault (core dumped) $ -- http://bugs.ruby-lang.org/