ruby-trunk-changes 2020-04-01

今日は(リリースされたのは昨日ですが)拡張ライブラリ socket の脆弱性修正や alpine でのビルド対応などがありました。

[61b7f86248] Yusuke Endoh 2020-03-31 11:18:21 UTC

拡張ライブラリ socket の BasicSocket#read_nonblock などに引数でバッファとして使う String オブジェクトを渡して、まだデータが受信してない状態で未初期化のバッファが String オブジェクトにセットされてしまうためメモリ上に残ったゴミが ruby レベルでみえてしまうという不具合の修正。脆弱性情報がこちらにまとめられています。 https://www.ruby-lang.org/en/news/2020/03/31/heap-exposure-in-socket-cve-2020-10933/

[519a69b55c] Paul Jordan 2020-04-01 01:13:49 UTC

Arm Linux の環境で Fiber の実装の coroutine に ucontext 実装ではなく独自のアセンブリ実装(arm32)を使うように configure を変更しています。

[0091fac1d8] Paul Jordan 2020-04-01 01:15:20 UTC

そして arm32 の coroutine 実装の coroutine/arm32/Context.S で .align 2 という directive などを追加しています。

[3e386d76c2] Paul Jordan 2020-04-01 01:18:23 UTC

musl (というか alpine) でのテストのために拡張ライブラリ fiddle の テストで arm-linux の時にライブラリの探すディレクトリの決定に /lib/arm-linug-gnuxxx がみつからなかったケースの workaround を追加しています。

[57a36a1698] git 2020-04-01 02:49:23 UTC

version.h の日付更新

[5a81562dfe] Nobuyoshi Nakada 2020-04-01 03:37:01 UTC

3e386d76c2d2f4a38ddf7101344178bff84c824f の fiddle のテストの変更をリファクタリングしています。

[151f8be40d] Takashi Kokubun 2020-04-01 04:58:01 UTC

MJIT で leave 命令のコンパイル時にキャンセルする場合に sp/pc のリセットするようにして leave 命令を副作用のない命令にしておくようにしています。最適化をきかせるためみたいですね。 leaf フラグは明示的に付けなくてもいいんでしたっけ。

[3a2073e61b] Nobuyoshi Nakada 2020-02-09 02:07:01 UTC

rubyspec で 2.5 から FrozenError 例外クラスが導入されたのでその差異を吸収するために定義されてた frozen_error_class というメソッドを削除して、直接 FrozenError を参照するようにしています。

[826f44834f] Nobuyoshi Nakada 2020-02-08 10:43:27 UTC

rubyspec の最低バージョンを 2.5 に引き上げて 2.4 サポートを停止しています。

[552f05ef27] Nobuyoshi Nakada 2020-04-01 06:34:01 UTC

ちょっとよくわからないのですが拡張ライブラリ etc の gemspec ファイルの spec.files から stub/etc.rb を削除。binary gem のサポートを切るとのこと。元々 ruby リポジトリ内の etc には当該ファイルはないですね。

[919b175afc] Nobuyoshi Nakada 2020-04-01 06:18:00 UTC

拡張ライブラリ etc で Struct::Passwd や Struct::Group などの定数を定義していたのを deprecated にしています。

[fad0a1451b] Nobuyoshi Nakada 2020-04-01 10:29:39 UTC

919b175afc389f8df6a3caa05ffdd28f5fc4bfca の etc での Struct の下の定数定義 deprecated 化を revert しています。拡張ライブラリで rb_deprecate_constant() を使うのがビルドのされかたによってはダメだったみたいです。