ruby-trunk-changes r36170 - r36188

今日は eval を使う時の YARV の処理の変更などがありました。

drbrain:r36170 2012-06-22 05:56:23 +0900

ruby_cleanup() の rdoc の typo 修正。 [ruby-core:45755] [Bug #6619]

svn:r36171 2012-06-22 05:56:35 +0900

version.h の日付更新。

nobu:r36172 2012-06-22 12:07:22 +0900

variable.c のインデントの修正。

nobu:r36173 2012-06-22 12:07:26 +0900

process.c の rb_exec_async_signal_safe() の 変数 sargp が fork(2) のない環境では NULL に置換されるマクロとして定義されていたので NULL 初期化されたローカル変数として定義するようにしています。また宣言に const を付けています。

nobu:r36174 2012-06-22 13:32:39 +0900

rb_check_copyable() という API を追加しています。コピー先が freeze されていないかのチェックと、コピー元が tainted/untrusted にマークされていないかをチェックするものです。追加されているだけでとりあえずまだ利用されてはいません。

nobu:r36175 2012-06-22 13:36:54 +0900

Random#marshal_load で先程追加した rb_check_copyable() を使って freeze していないかとコピー元が汚染されていないかをチェックすることで、marshal_load で freezeしたオブジェクトが変更できてしまう不具合に対策しています。 [Bug #6540]

nobu:r36176 2012-06-22 14:22:46 +0900

Marshal.dump で第2引数として IO (のように振る舞うオブジェクト)を要求するためそうでなかったら例外を発生させる処理を関数として切り出して使いまわすようにするリファクタリングをしています。

ko1:r36177 2012-06-22 17:58:29 +0900

バックトレースのテストで再帰する回数を減らしています。

akr:r36178 2012-06-22 18:24:21 +0900

process.c の save_redirect_fd()、run_exec_dup2()、run_exec_open() などは昨日のリファクタリングとは逆に VALUE を受け取っていたのを struct rb_execarg を受け取ってそのメンバの options にアクセスするようにしています。

ko1:r36179 2012-06-22 18:32:56 +0900

rb_thread_t には eval でスクリプト片を実行する時にローカル変数とメソッド(かっこなしの呼び出し)をパーサが区別したり、その他の理由で base_block というメンバに呼び元の rb_block_t をセットしておいて、実行後にクリアするようにしていたのですが、例外が発生した時にこれがクリアされないままになることがあって、その状態で別の RubyVM::InstructionSequence をコンパイルしようとすると SEGV などが発生してしまっていました。そのため base_block を eval でのコンパイルの前後でセット/クリアするようにして、実行する時にはスタックフレームを積む時に base_thread を明示的に引数として渡してセットするようにしています。

kou:r36180 2012-06-22 18:52:32 +0900

README.EXT, README.EXT.ja の Data_Wrap_Struct() の仮引数の名前を定義にそろえています。

akr:r36181 2012-06-22 20:30:29 +0900

Process.exec などのオプションを管理する struct rb_execarg に pgroup_given と pgroup_pgid に :pgroup オプションの情報を格納するようにして、Array のオブジェクトで取り回していたのをやめています。

yugui:r36182 2012-06-22 21:05:11 +0900

common.mk に不足していた依存関係を追加しています。

nobu:r36183 2012-06-22 21:45:08 +0900

Test::Unit の --job-status=replace の時に実行中テストの情報を同じ行の中で表示するためにクリアする処理で @status_line_size というインスタンス変数が未初期化だったら 0 で初期化しておくようにしています。

nobu:r36184 2012-06-22 21:45:12 +0900

make test-all に TESTS 変数で -j を渡して並列実行した時にファイル数ベースでテストのプログレスを表示するようにしています。

nobu:r36185 2012-06-22 22:37:16 +0900

Random の marshal_load で freeze したオブジェクトの書き換えができてしまうという不具合の修正(r36175)のテストに追加して initialize を呼び出した時もチェックするようにしたのでそのテストを追加しています。

nobu:r36186 2012-06-23 00:51:41 +0900

.gdbinit で Rubyデバッグ用のコマンド rp (VALUE の中身を認識して表示してくれるコマンド)で struct RClass の時に表示する内容を増やしています。

svn:r36187 2012-06-23 00:51:49 +0900

version.h の日付更新。