ruby-trunk-changes 2022-11-22

今日は Object Shapes の実装の最適化(?)のための内部実装の変更や標準添付ライブラリの Cookie やヘッダに含まれる文字のチェックの強化などの変更がありました。cgi の変更は gem パッケージとして先行してリリースされていますので CVE-2021-33621: HTTP response splitting in CGI も参照してください。

[116920cff8] Nobuyoshi Nakada 2022-11-21 07:20:17 UTC

標準添付ライブラリ un.rb で Kernel#open を使っていたところを File.open を利用するようにしています。

[612aa5c24a] Nobuyoshi Nakada 2022-11-21 07:20:17 UTC

mkmf.rb や ext/extmk.rb 各種 extconf.rb や tool/ の下のスクリプト群でも Kernel#open を使っていて引数がファイルとわかっているものは File.open を利用するようにしています。

[648927d71b] Peter Zhu 2022-11-15 15:52:39 UTC

インスタンス変数設定する obj_ivar_set() と vm_setivar_slowpath() という関数は似たようなことをしているけど微妙に異なっているので obj_ivar_set() を rb_obj_ivar_set() と改名して vm_setivar_slowpath() からもこの関数を再利用するようにリファクタリングしています。

[1f0888ab3e] Peter Zhu 2022-11-17 14:47:18 UTC

Object Shapes で generic_ivar_set() でインスタンス変数を追加する時に shape の情報を更新する時に冗長な探索の繰り返しをしないように get_next_shape_internal() 内で rb_shape_lookup_id() を呼び出していたのを消して generic_ivar_set() 内で最初に変更後の shape を探しておくようにしています。

[5b959e238e] Nobuyoshi Nakada 2022-11-11 01:37:34 UTC

701dfe4eb741628213e4d701c13ad6d76904ac4f の syntax_suggest がトップレベルのスクリプトで機能しない不具合修正の再修正。ちょっとよく追いきれませんがトップレベルで捕捉されない例外の処理を大幅に変更しています。コミットログによると Ractor の終了前に例外のエラーメッセージの生成をしておく必要があるのでそのため処理の順序を変更しているようです。 [ruby-core:109995] [Bug #19016]

[b7a0ce32da] Nobuyoshi Nakada 2022-11-11 08:51:31 UTC

701dfe4eb741628213e4d701c13ad6d76904ac4f5b959e238e5b7c18d6a1a5f5d9b4b2063de628fe のさらに追加修正で process_options() でドップレベルのスクリプト実行のために rb_parser_set_context() の第3引数に常に TRUE を渡していたのをファイル指定でスクリプト実行する時には FALSE を渡して SyntaxError を発生させて syntax_suggest が有効になるようにしています。 [ruby-core:109995] [Bug #19016]

[5f95228c76] Peter Zhu 2022-11-18 15:07:06 UTC

RVALUE 型のサイズから末尾の空き領域(padding のぶん?)のサイズを RVALUE_OVERHEAD というマクロで定義して統計情報の利用サイズなどからこれを除くようにしている? みたいです。コミットログによると Object Shapes の実装での節約のためにやっているみたいですがどの変更部分がそれに相当するのかわからず(直接関係ないリファクタリングも含まれているみたい)。また gc_move() では slot_size が RVALUE_OVERHEAD ぶんを含まなくなったのでその部分もコピーするため改めて memcpy(3) を呼ぶとかしていてはたして全体的に効率良くなるのかな。

[09423876f9] Peter Zhu 2022-11-18 15:39:09 UTC

Object Shapes の実装で shape_id を埋め込むための flags のビット数をデバッグビルド時に 16 bits に制限していたのを shape_t の型に応じて 32bits 使えるようにしています。 5f95228c76e6f6994eb4149217fe3e38f9ff8a27 の変更もこれに絡んでたみたいですがデバッグビルド時に _ractor_belonging_id を flags から RVALUE 内に埋め込むようにしたので flags の余裕ができたので 32bit 使えるようになったということみたいです。なるほどそれが目的だったのか。

[607fb49dbc] Takashi Kokubun 2022-11-21 18:27:39 UTC

YJIT の Rust 実装のための Rust の要求バージョンを 1.58.1 から 1.58/0 に緩めています。 https://github.com/ruby/ruby/pull/6780

[cf05c202ce] MSP-Greg 2022-11-20 21:06:33 UTC

rubyspec の C API のテスト用の拡張ライブラリコンパイルのために RbConfig::CONFIG['libdirname'] を参照するところで古い ruby のために fetch を使って設定されてない時にデフォルト値として "libdir" を利用するようにしています。mswin ではこの項目は設定されないためとのこと。

[c05f85f373] Nobuyoshi Nakada 2022-08-16 09:36:12 UTC

標準添付ライブラリ cgiCGI::Cookie で name や path, domain の文字列に含まれる文字種のチェックを追加して不正な文字を含む時に例外を発生させるようにしています。

[0e75b2f2e6] Yusuke Endoh 2022-11-22 01:49:27 UTC

標準添付ライブラリ cgi でレスポンスヘッダを生成する時に改行コードが含まれていないかチェックを一律追加しています。

[3f960cf445] Hiroshi SHIBATA 2022-11-22 01:58:26 UTC

標準添付ライブラリ cgi のバージョンを 0.3.4 に更新しています。

[5304b3bd85] git 2022-11-22 02:01:14 UTC

NEWS の default gems のバージョンリストの cgi のバージョンも更新しています。

[58682b6980] Nobuyoshi Nakada 2022-11-22 02:05:52 UTC

c05f85f373ed48594d9bf08e11ae0c84c06062f7CGI::Cookie の文字種チェックの再修正で domain のチェックで先頭が数字のサブドメインが許可されなくなっていたのでチェックを緩めています。

[805d70f716] Hiroshi SHIBATA 2022-11-22 02:11:50 UTC

標準添付ライブラリ cgi のバージョンを 0.3.5 に再度更新しています。

[32d202eb93] git 2022-11-22 02:13:26 UTC

NEWS の default gems のバージョンリストの cgi のバージョンも更新しています。

[36f297e621] Nobuyoshi Nakada 2022-11-22 02:29:04 UTC

rubyspec の cgi のテストで CGI::Cookie の文字種チェックの強化でエラーになる文字列が使われていたので修正しています。

[77f963004f] Nobuyoshi Nakada 2022-11-22 04:58:56 UTC

Array#pack のテストでなぜかフォーマット文字列などにグローバル変数が利用されていたのでローカル変数に変更しています。

[8c02084ac8] Nobuyoshi Nakada 2022-11-22 05:07:21 UTC

Array#pack のテストで個別に警告メッセージをチェックするテストが書かれてたのを assert_warn というメソッドを利用するようにリファクタリングしています。

[20b9d7b9fd] Nobuyoshi Nakada 2022-11-22 05:20:45 UTC

pack.c の定数 UNPACK_ARRAY、UNPACK_BLOCK、UNPACK_1 などを定数マクロから enum による定義に変更するリファクタリング