ruby-trunk-changes r35797 - r35813

今日も backtrace 関係の修正がありました。RubyVM::FrameInfo というクラスが導入され、RubyVM::FrameInfo.caller メソッドで caller の情報がオブジェクトとして取り出せるようになりました。また OpenSSL の client-side renegotiation という機能を制御できるようにする機能追加がありました。

emboss:r35797 2012-05-26 09:56:33 +0900

拡張ライブラリ openssl に OpenSSL::SSL::SSLContext#disable_client_renegotiation, #allow_client_renegotiation というメソッドを追加して、client-side renegotiation という機能の制御をできるようにして、デフォルトを off に(handshake count を 0 に)しています。 renegotiation の機能を突いた脆弱性というのがあるようです。 RFC 5746 を参照。

svn:r35798 2012-05-26 09:56:37 +0900

version.h の日付更新。

ko1:r35799 2012-05-26 11:10:37 +0900

backtrace に格納するフレーム情報の種類に C の関数の情報を呼び元の Ruby のメソッドなどの情報からコピーする FRAME_INFO_TYPE_ISEQ_CALCED というのを増やしています。また storage というメンバーも追加していますがこちらはまだ未使用です。

ko1:r35800 2012-05-26 12:25:15 +0900

frame_info_to_str() の switch 文の break がもれていたのを修正。
また backtrace_object() で lev, n 引数を削除して返すフレーム情報のオフセットと数の指定はこの関数ではしないようにして backtrace_collect() で削るようにしています。
また caller を呼ぶベンチマークを追加しています。

ko1:r35801 2012-05-26 13:49:23 +0900

RubyVM::FrameInfo というクラスを追加して、RubyVM::FrameInfo.caller というクラスメソッドで caller の情報を文字列ではなくて RubyVM::FrameInfo のインスタンスの配列として取り出せるようにしています。RubyVM::FrameInfo はファイル名、行番号、メソッド名、iseq などを取り出すことができてプログラムで扱うのが楽です(文字列からパースしなくていい)。メソッド名については Ruby 2.0 までに良い名前を考えて変更したいとのこと。

ko1:r35802 2012-05-26 13:51:32 +0900

NEWS ファイルに caller の第2引数の追加について書いています。

ko1:r35804 2012-05-26 15:31:31 +0900

caller のテストで深いバックトレースを作るためにメソッドを再帰的に呼び出す回数を 20 -> 10 と減らしています。環境によってスタック不足でエラーになっていたようです。

nobu:r35805 2012-05-26 16:24:59 +0900

File.realpath と File.realdirpath のテストで渡すパスの作成方法を変更しています。Windows の UNC を意識した変更ということなのですが、どっちかというと元のパスの作りかたのほうの意図がわからないですね。なにをしていたんだろうこれ。

nobu:r35806 2012-05-26 16:26:36 +0900

と思ったら File.readdirpath で UNC の時にセパレータ('/')を追加する修正が入っています。
ここで追加されているテストってたまたま //:/foo にディレクトリが存在しないと Errno::ENOENT になってスキップされると思うのですが、でもその位置にないとテストにならないということでしょうか。[追記]なかださんに教えていただきました。UNC 上では存在しないパスを指定してもエラーにならないそうです。なんということでしょう。[/追記]

ko1:r35807 2012-05-26 17:08:16 +0900

caller の引数の lev と n の型を size_t から int に変更しています。

tadf:r35808 2012-05-26 18:10:42 +0900

Time#strftime と DateTime#strftime の '%Z' の項目の rdoc 用コメントを少し変更しています。
おそらく [Bug #6491] に関連しての変更でしょう。

tadf:r35809 2012-05-26 18:16:26 +0900

DateTime#strftime の '%y' と '%Y' 指示子の処理をそれぞれ '%g' と '%G' の処理とまとめています。

tadf:r35810 2012-05-26 18:21:21 +0900

Time#strftime と DateTime#strftime の '%Z' の rdoc 記述もう少し変更。

tadf:r35811 2012-05-26 19:05:25 +0900

DateTime#strftime の '%N' 指示子の精度のコメントに例を追記しています。

svn:r35813 2012-05-27 03:18:49 +0900

version.h の日付更新。