今日は主に ASAN を有効にした時の GC 関連の修正や拡張ライブラリ ripper の不具合修正などがありました。
[c37bdfa531] Peter Zhu 2024-12-11 17:18:00 UTC
ASAN 用の関数 asan_poison_object()/asan_unpoison_object() でオブジェクトの slot の struct RVALUE の先頭のメンバーのみ poison/unpoison していたのを slot 全体(slot サイズを拡張している heap の場合後続の領域も)を対象とするようにしています。
[a126560196] Peter Zhu 2024-12-11 17:58:05 UTC
GC のデフォルトの実装の ractor_cache_allocate_slot() で slot の ASAN 向け unpoison 漏れがあったのを修正しています。
[f02e31294c] Peter Zhu 2024-12-11 19:09:22 UTC
GC のデフォルト実装の try_move() で NULL ポインタに対して asan_unpoison_object() を呼ぶ可能性があったので NULL チェックして呼ぶように修正しています。
[16750a47d0] Peter Zhu 2024-12-13 18:43:30 UTC
GC のデフォルト実装で compaction 時に read barrier をかけて読み込みを検出した page にアクセスがあった時のシグナルハンドラの実装で対象のアドレスを slot のサイズの整数倍に align していたのをやめています。GET_PAGE_BODY() を利用するので不要または不具合があったようです。
[a72717675f] Peter Zhu 2024-12-13 18:46:29 UTC
internal/sanitizers.h の asan_poison_object() の prototype 宣言を RUBY_SYMBOL_EXPORT_BEGIN/RUBY_SYMBOL_EXPORT_END のあいだに入れて export するようにしています。
[fcd44eee09] Peter Zhu 2024-12-18 15:19:07 UTC
GC のデフォルト実装で ASAN 有効時の unpoison の呼び出し漏れを修正しています。
[a58675386c] Peter Zhu 2024-12-18 17:01:09 UTC
ASAN 用の関数で外から呼べるようにした関数の関数名に rb_ の prefix を追加しています。
[7b2ae8df90] Nobuyoshi Nakada 2024-12-19 14:20:09 UTC
拡張ライブラリ ripper で正規表現の named capture でローカル変数にマッチしたグループを代入する機能で _1 のような実際には変数ではない parameter を指定した時に異常終了していた不具合を修正しています。 [ruby-core:120322] [Bug #20969]
[ce849d565b] Alan Wu 2024-12-19 15:32:14 UTC
ruby2_keywords による Hash からキーワード引数への変換時の警告でメソッド名を埋め込んでいるところで PRIsVALUE を利用して Encoding を保持して埋め込むようにしています。 UTF-16 や UTF-18 などの Encoding を持つメソッド名だとバイト列に NUL 文字が含まれる可能性があるのでその対応のため。
[5978f2f114] Alan Wu 2024-12-19 17:28:21 UTC
imemo.c の vm_ccs_free() で無効化する callcache が解放済みの領域を指している場合の異常終了を避けるため rb_gc_pointer_to_heap_p() でのチェックを追加しています。 https://github.com/ruby/ruby/pull/11995 で同時に呼ばれている rb_objspace_garbage_object_p() の中にこのチェックも含めるという変更も提案されていますが、全ての箇所でこのチェックをするとパフォーマンスの劣化があるということでひとまず局所的に修正しているようです。
[33f95d632d] Peter Zhu 2024-12-19 18:52:01 UTC
imemo.c の vm_ccs_free() という関数で ASAN 用の unpoison/poison をしていたのを削除しています。
[2a44a57e14] Stan Lo 2024-12-18 20:36:59 UTC
Exception クラスの rdoc 用コメントの例外クラスの一覧の fatal の項目のリンクを絶対 URL から cross reference に変更しています。
[978df259ca] Soutaro Matsumoto 2024-12-20 00:48:01 UTC
gems/bundled_gems の rbs のバージョンを 3.8.0.prep.1 に更新しています。また rbs のテストの skip する対象を更新しています。 https://github.com/ruby/ruby/pull/12399
[2f6c694977] Matt Valentine-House 2024-12-18 22:10:04 UTC
メモリ確保の失敗時に NoMemoryError 例外を発生させる rb_memerror() で例外発生させることができないケースで exit(3) する条件を追加しています。現在 push されている tag の複数 Ractor の協調用の struct rb_vm_tag::lock_rec が実行中の rb_execution_context_t の値と一致していない場合 tag jump 後の unlock で異常終了してしまうので例外発生せずメッセージを出してプロセス終了させるようにしています。
[b53a75230f] Misaki Shioi 2024-12-20 09:55:26 UTC
拡張ライブラリ socket の Happy Eyeballs V2 関連のテストで ensure で後始末をするようにしています。 assert_separately で子プロセスを起動していますがそこでの Thread などのリソースも停止してから抜けるようにしています。 https://github.com/ruby/ruby/pull/12406