ruby-trunk-changes r60592 - r60602

今日は File.realpath の戻り値が常に tainted になる不具合修正や Dir.mkdir, Dir.rmdir で GVL 解放するようにする変更などがありました。

normal: r60592 2017-11-01 04:10:19 +0900

Dir.mkdir や File.chmod の mode を保持する変数の型を int から mode_t に変更しています。

svn: r60593 2017-11-01 04:10:20 +0900

version.h の日付更新。

marcandre: r60594 2017-11-01 07:24:03 +0900

拡張ライブラリ pathname の Pathname.glob の rdoc 用コメントのサンプルコードがなぜか無駄に文字列リテラルの連結が使われてたので1つのリテラルに修正しています。

normal: r60595 2017-11-01 09:17:11 +0900

Dir.mkdir と Dir.rmdir で mkdir(2) と rmdir(2) のシステムコールを呼ぶ時に GVL を解放するようにしています。最近ちょっとずつ進んでいる遅い filesystem 対策の一環ですね。

nobu: r60596 2017-11-01 10:51:57 +0900

File.realpath で引数の path が tainted でなくて cwd も利用していない時にも戻り値の文字列が taint されるようになっていたので、OBJ_INFECT() を使って引数のオブジェクトの tainted フラグを伝播させるように修正しています。 [ruby-core:83583] [Bug #14060]

nobu: r60597 2017-11-01 10:55:45 +0900

Dir.rmdir の実装でポインタの型の違いで警告が出ていたのを抑制するため明示的なキャストを追加しています。

ko1: r60598 2017-11-01 11:04:02 +0900

r60598 の File.realpath の taint フラグの伝播を revert して常に taint するように戻しています。追加したテストが失敗してたそうです。

nobu: r60599 2017-11-01 11:22:10 +0900

r60598 で revert された r60596 のリベンジ。テストのほうを修正して追加しています。 [ruby-core:83583] [Bug #14060]

nobu: r60600 2017-11-01 12:26:27 +0900

r60594 で修正した Pathname.glob の rdoc 用コメントですが、C 言語のコメント中に /* という文字列がくると -Wcomment で警告されるのでそれを避けるためだったようで、? を追加してこれを抑制するようにしています。なるほどーそういうことだったのか。

nobu: r60601 2017-11-01 12:26:54 +0900

test/ruby/test_syntax.rb で top-level return のテストで、スクリプトを標準入力で与えた時と -r オプションでファイルからロードした時のテストを両方 all_assertions_foreach のブロックの中に入れて、標準入力がらスクリプトを読ませるテストのエラーでファイルから読むほうが実行されないことがないようにしています。

nobu: r60602 2017-11-01 12:26:55 +0900

compile_return() の type での分岐を if 文から switch 文に書き直して、ISEQ_TYPE_ENSURE や ISEQ_TYPE_RESCUE の時に is->body->parent_iseq を辿る処理をループで書き直しています。これまでは1段した辿れなかったのを複数回辿れるようにしているので、若干挙動にも変化がありそう。