ruby-trunk-changes r48147 - r48168

今日は LazySweep を OFF にしてビルドしていた時の GC の不具合や Method オブジェクトから Proc 化して生成した Binding の receiver の不具合修正、そして標準添付ライブラリ rexml の脆弱性修正がありました。これに伴い 2.1.4, 2.0.0-594, 1.9.3-p550 の全安定版のリリースがありました。

https://www.ruby-lang.org/ja/news/2014/10/27/ruby-2-1-4-released/

https://www.ruby-lang.org/ja/news/2014/10/27/ruby-2-0-0-p594-is-released/

https://www.ruby-lang.org/ja/news/2014/10/27/ruby-1-9-3-p550-is-released/

利用している Ruby の更新をお願いします。

normal: r48147 2014-10-27 11:33:51 +0900

test/ruby/test_process.rb の fork のタイミング依存の現象のテストで fork した子プロセスとの通信に使う読み込みのバッファの文字列を事前に用意したり、子プロセスで GC.disable したりと GC 負荷を下げるようにしています。メモリがすくない環境で時々失敗するのを改善しようとしているそうです。

svn: r48148 2014-10-27 11:34:04 +0900

version.h の日付更新。

nobu: r48150 2014-10-27 13:40:13 +0900

gc_sweep_rest() で LazySweep を off にしてコンパイルされていると sweep されない不具合を修正しています。 [ruby-dev:48706] [Bug #10431]

nobu: r48151 2014-10-27 14:53:22 +0900

拡張ライブラリ ripper のテストで二項演算子のパースのテストを演算子毎のテストメソッドを定義するようにしています。

nobu: r48152 2014-10-27 15:16:16 +0900

ID2SYM() の最適化。gcc 拡張が利用できる時は rb_id2sym() をマクロとして定義して、引数が定数の時でかつ static symbol の時は関数呼び出しをしないように呼び元で展開するようにしています。

nobu: r48153 2014-10-27 15:23:09 +0900

parse.y で ripper 用の二項演算子の ID を rb_intern() で生成していたのを ID2SYM() を使って生成するようにしています。またこれに関連して "::" の Symbol を組み込みで生成しておくようにしています。

nobu: r48154 2014-10-27 15:25:59 +0900

r48153 の続き。 "&&" と "||" の演算子の ID も組込みで定義しておくようにしています。

nobu: r48155 2014-10-27 15:38:09 +0900

ext/ripper/tools/generate.rb というツールがあって、これ何をしているのかよく知らないのですが、C のソースを吐くみたいです。多分ビルド時にソースの自動生成で使ってるんですね。で短いコードを生成するようにしているそうです。

nobu: r48156 2014-10-27 15:50:49 +0900

拡張ライブラリ ripper の ext/ripper/eventids2.c で ID の変数群を構造体のメンバにまとめています。サイズの削減のためとあるけどはて。これで減るのかな…?

ko1: r48157 2014-10-27 16:02:03 +0900

GC_ENABLE_INCREMENTAL_MARK の定義で条件コンパイルしていた関数マクロ is_incremental_marking() と will_be_incremental_marking() を #if GC_ENABLE_INCREMENTAL_MARK で分岐するのではなくて GC_ENABLE_INCREMENTAL_MARK && ... のような形で展開するようにしています。

ko1: r48158 2014-10-27 16:29:32 +0900

super の呼び出しにブロックを渡すと親クラスのメソッドにそのブロックが渡されることを確認するテストを追加しています。

nobu: r48159 2014-10-27 17:12:52 +0900

proc.c の proc_binding() で proc->block.iseq をローカル変数に代入しておいて使いまわすようにリファクタリングしています。んー、RB_TYPE_P() とかのマクロに渡しているから複数回使われるように展開されるからですかね。

nobu: r48160 2014-10-27 17:17:26 +0900

Method オブジェクトから to_proc で Proc オブジェクト化したものの binding で取得した Binding オブジェクトの receiver が Method オブジェクトになっていた不具合を修正しています。 [ruby-core:65917] [Bug #10432]

usa: r48161 2014-10-27 20:18:02 +0900

標準添付ライブラリ rexml にパラメータエンティティの展開を行わせる XML をパースさせると大量にメモリを消費するので、展開できるサイズに制限を加えるようにしています。 これにより DoS 攻撃が可能となるため脆弱性とみなして、この修正を含む ruby 2.1.4、2.0.0-p594、1.9.3-p550 がリリースされています。 https://www.ruby-lang.org/ja/news/2014/10/27/rexml-dos-cve-2014-8080/

kazu: r48168 2014-10-27 22:04:57 +0900

r48157 の ChangeLog エントリの typo 修正。