ruby-trunk-changes r63769 - r63778

今日は Marshal.load 時に不正なオブジェクトに Encoding を紐付ける不正なデータで例外を発生させるようにする変更などがありました。

eregon: r63769 2018-06-27 22:41:29 +0900

昨日の変更に続いてさらに rubyspec を更新しています。

nobu: r63770 2018-06-27 22:42:49 +0900

r63761 と同様にまだ pid_t を直接使っているところが残ってたので rb_pid_t を使うように修正しています。

nobu: r63771 2018-06-27 23:00:34 +0900

rb_check_frozen_internal() というマクロの定義で OBJ_FROZEN() を使っていたところを RB_OBJ_FROZEN() という RB_ つきマクロを使うように修正。

hsbt: r63772 2018-06-28 00:56:55 +0900

test/lib/minitest/unit.rb で MJIT が有効かどうかのチェックでそもそも RubyVM::MJIT が存在しない時に対応するようにしています。

svn: r63773 2018-06-28 00:56:56 +0900

version.h の日付更新。

normal: r63774 2018-06-28 03:27:58 +0900

子プロセスを起動するテストの timeout の調整や、IO のテストで親 Thread が IO 待ちになるのを sleep で待ってたところを Thread#stop? を使ったチェックに書き換える変更など。あと子プロセスを何度も作成するテストで --disable-gems オプションをつけるようにしています。

a_matsuda: r63775 2018-06-28 12:48:52 +0900

DRb::DRbIdConv の rdoc 用コメントの typo 修正。 https://github.com/ruby/ruby/pull/1900

nobu: r63776 2018-06-28 16:34:36 +0900

dsymbol_alloc() で dynamic symbol を生成する時に Encoding をセットするのに rb_enc_associate() を使ってたのを rb_enc_set_index() に変更しています。 rb_enc_associate_index() で既に紐付いてる Encoding をチェックしているのが無駄なので直接 enc_set_index() を呼ぶということみたいです。 coderange のチェックのほうは省略してもいいのかな。

ko1: r63777 2018-06-28 17:35:48 +0900

encoding.c の enc_capable() という Encoding との関連付けを持てるオブジェクトかどうかをチェックする関数の wrapper として rb_enc_capable() という関数を定義して、marshal.c の r_ivar() などでオブジェクトに関連する Encoding が読み込まれた時にチェックして、不正なオブジェクトだったら ArgumentError を発生させるようにしています。普通に Marshal.dump したものなら Encoding がつかないオブジェクトにくっついていくことはないと思うので、バイナリをいじって不正なものを読み込ませるとまずかったのかな。

nobu: r63778 2018-06-28 18:59:35 +0900

rubyspec の Encoding についてのテストに使う拡張ライブラリで同じマクロ名を二重にチェックしていたのを削っています。またチェックすべき関数名も間違えていたのを修正しています。