From: Hiroshi Nakamura Date: 2011-07-14T14:52:14+09:00 Subject: [ruby-dev:44100] [Ruby 1.9 - Bug #4445][Closed] ext/openssl の verify_callback が rb_protect で保護されていない Issue #4445 has been updated by Hiroshi Nakamura. Status changed from Assigned to Closed r32537でtrunk、r32538でruby_1_9_3を修正しました。結果的には、Obayashiさん(前回呼び捨てですいません)のpatchをそのまま当て、かつ例外を投げている場合にはwarnで警告をする(しかし無視して、通常の検証失敗とする)ようにしました。テストを書いてみたらSSL接続が残ったままになり、GCで回収されるまでそのままという、いかにも危ない挙動になった(当たり前)ので、この時期ではありますが対処しました。 挙動変更は以下です: verify callbackで例外を投げた場合、従来はその例外が飛んでいましたが、代わりにwarnでやめろと警告され、SSLErrorが上がるようになります。 Obayashiさん、ご報告ありがとうございました。 ---------------------------------------- Bug #4445: ext/openssl の verify_callback が rb_protect で保護されていない http://redmine.ruby-lang.org/issues/4445 Author: Ippei Obayashi Status: Closed Priority: Normal Assignee: Hiroshi Nakamura Category: ext Target version: 1.9.3 ruby -v: ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux] =begin openssl では 証明書の検証に付加的な機能を付けるための callback を設定できます。これをrubyから利用できるようになっていますが rb_protect を使っていないため、openssl ライブラリ内部を飛び越えて 例外が飛ぶようになってしまう状態です。 現在ではSEGVが発生する等の問題は見つかってはいませんがメモリリークなど 起きている可能性が高いです。 とりあえず大域脱出を止めるパッチを添付します。例外を適当な場所で再送するべきかもしれませんが それはしていません。 =end -- http://redmine.ruby-lang.org