ruby-trunk-changes r53128 - r53163

今日は拡張ライブラリ fiddle の tainted 文字列のチェック強化(CVE-2015-7551 の修正)があり、これを受けて安定版のリリースがありました。 see https://www.ruby-lang.org/ja/news/2015/12/16/unsafe-tainted-string-usage-in-fiddle-and-dl-cve-2015-7551/
また標準添付ライブラリなどのスクリプトに一律に frozen_string_literal: false の magic comment が追加され、--enable-frozen-string-literal オプションをつけた時に標準添付ライブラリ部分で壊れないように対応されています。

naruse: r53128 2015-12-15 22:11:33 +0900

r53124 の Encoding の名称変更(EBCDIC-US → IBM037)に追随して enc/trans/ebcdic.trans に記述されている名称も変更しています。

ngoto: r53129 2015-12-15 23:20:27 +0900

gc.c の RUBY_ALIAS_FUNCTION() マクロの展開結果にセミコロンは含まないようにしています。 Oracle Solaris Studio での警告を抑制するためだそうです。 また NOINSERT_UPDATE_CALLBACK() の呼び出し部分のセミコロンも削ってます。こっちは展開結果で削るんじゃないんですね。 [ruby-dev:49439] [Bug #11821]

ngoto: r53130 2015-12-16 00:26:47 +0900

r35199 とか r35258 で標準添付ライブラリ webrickWEBrick::Utils::TimeoutHander で起動する Thread 内で @timeout_info に排他処理せずにアクセスするためイテレータ中の Hash/Array が操作されてしまう問題を dup したりして回避していましたが、ThreadMutex による排他をして停止対象の Thread を別の配列に入れておいて、排他処理を抜けてからそれらについて interrupt を呼ぶように割り込み対象の取得と実際の割り込み処理を分離して race condition を避けるようにしています。 [ruby-dev:49387] [Bug #11742]

svn: r53131 2015-12-16 00:29:00 +0900

version.h の日付更新。

nobu: r53132 2015-12-16 00:32:28 +0900

Enumerator::Lazy のコールバック時にブロックを呼び出すための配列を rb_ary_tmp_new() で内部的配列を作成していたのを、ALLOCV_N() で可能ならスタック上にメモリを確保するようにして最適化させています。

ngoto: r53134 2015-12-16 01:03:00 +0900

r53130 の再修正。 WEBrick::Utils::TimeoutHandler で TimeoutMutex で排他するのは @timeout_info を操作する時になるように整理しています。 なんとなく register などで wakeup しているところもクリティカルセクションに入れておかないとシグナル喪失しそうな気がしてしまいますが、ここ ConditionVariable を使ってるわけじゃなくてただの Thread#wakeup みたいなのでその必要はなさそうです。というか、これ全体的にあんまり堅牢に作られてないような気はしますね…。 [ruby-dev:49387] [Bug #11742]

marcandre: r53136 2015-12-16 05:19:35 +0900

Comparable の == メソッドで例外を握り潰さなくなった変更について NEWS ファイルに追記して、rdoc 用コメントも修正しています。 [ruby-core:51389] [Feature #7688]

headius: r53137 2015-12-16 07:58:25 +0900

Queue#close のテストのうち Queue#pop で待っている Thread の数をチェックする assertion を消しています。タイミングによってはここで Thread が終了しているとは限らないので失敗する可能性がある assertion だったようです。 JRuby でここが失敗していたようです。

nobu: r53138 2015-12-16 10:49:42 +0900

ブロックつきメソッド呼び出しの後に &. 演算子を chain した時に &. ではなくただのメソッド呼び出しの命令になるようにパースしてしまっていたのを修正しています。 [Feature #11537]

nobu: r53139 2015-12-16 11:36:12 +0900

IO#advice のテストで fadvice(2) に対応していないプラットフォームで Errno::ENOSYS を発生させないようにしたので、例外を捕捉するかわりに skip するようにしています。 [ruby-core:72059] [Feature #11806]

marcandre: r53140 2015-12-16 12:25:09 +0900

標準添付ライブラリ struct のテストで Struct から作ったクラスで initialize を再定義することができることを確認するテストケースを追加しています。 [ruby-core:71553] [Feature #11708]

naruse: r53141 2015-12-16 14:07:31 +0900

標準添付ライブラリとテストの .rb ファイルに全て(既についているものは除いて) frozen_string_literal: false の magic comment を追加しています。
これは --enable=frozen-string-literal のオプションをつけて文字列リテラルが freeze されるようになった時に標準添付ライブラリが対応していないためにうまく動かないようだと自分のアプリのチェックをするのに邪魔になるので、とりあえず false にして freeze されないようにしているということです。

naruse: r53142 2015-12-16 14:25:46 +0900

test/lib/test/unit/parallel.rb で子プロセスから例外を受け取った時に backtrace が nil だとエラーになってしまうので、["unknown method"] という1つだけのダミーのトレースを入れておくようにしています。

naruse: r53143 2015-12-16 14:31:54 +0900

r53141 と同様に拡張ライブラリの ext/ 配下に存在する .rb ファイルにも frozen_string_literal: false の magic comment を追加しています。

ko1: r53144 2015-12-16 15:38:52 +0900

r51243 で構造体メンバ rb_proc_t::blockprocval と rb_binding_t::blockprocval を削除していましたが、これによりマーク漏れがおきていたのを修正しています。 vm_make_env_each() で vm_make_proc_from_block() の戻り値のチェックがまちがってたので戻り値の型を int にして、ポインタ渡しの引数でブロックの VALUE を返すようにしています。しかし vm_make_env_each() でのチェックが Qfalse との比較になっているので、意味的には FALSE との比較じゃないですかね(展開したら同じことですけど)。 [ruby-core:71737] [Bug #11750]

normal: r53149 2015-12-16 16:16:00 +0900

NEWS ファイルに IO#advise が Errno::ENOSYS を発生させなくなったことについて追記しています。 けど IO#fadvise と "f" がついてしまっていますね。 [ruby-core:72168] [Feature #11806]

normal: r53150 2015-12-16 16:25:38 +0900

IO#advise のテストでコメントやメッセージで "fadvice" と typo している(s -> c)ところを修正しています。

naruse: r53151 2015-12-16 18:25:48 +0900

r53141 で mkmf.rb と shellwords.rb の magic comment が重複してしまったので削っています。

shugo: r53152 2015-12-16 19:35:34 +0900

Enumerator::Lazy のブロックが Symbol から Proc に変換したブロック引数に対応していない不具合を修正しています。 r52138 のあたりで Symbol を Proc オブジェクトとして引きまわすことがあるようになった時に vm_make_proc_from_block() での対応が不足していたようです。 [ruby-core:72083] [Bug #11811]

nagachika: r53153 2015-12-16 21:08:49 +0900

拡張ライブラリ fiddle の Fuddle::Handler で引数の文字列が taint されている時に SecurityError が発生するようにチェックを強化しています。これが CVE-2015-7551 向けの修正で、これを受けて安定版 2.2.4/2.1.8/2.0.0-p648 がリリースされました。

nagachika: r53163 2015-12-16 23:48:09 +0900

r53149 の NEWS ファイルと ChageLog エントリの IO#fadvise を IO#advise に修正しています。