ruby-trunk-changes 2021-09-23

今日は irb の更新や Marshal.load の修正などがありました。

[782d1d876b] Kaíque Kandy Koga 2021-09-19 19:44:11 UTC

irbIRB::RubyLex#check_corresponding_token_depth というメソッドに引数を追加してヒアドキュメントの途中で先頭の空白の数を返すようにしています。まだ戻り値は使ってないですが、 "<<~" によるヒアドキュメントは先頭の空白を除去するのでいくつ削られるかを把握するために将来使うつもりなのでしょう。

[357406da8b] Kazuhiro NISHIYAMA 2021-09-22 09:14:13 UTC

標準添付ライブラリ reline で String#unpack を使って最初の要素だけ使ってたところを String#unpack1 を利用するようにリファクタリングしています。

[552728a23a] Nobuyoshi Nakada 2021-09-22 15:04:14 UTC

7c0230b05d0978958f89434c84ddd9c82419c1a5 の ruby2_keywords つきメソッドに渡された Hash のフラグを Marshal.load 時に保持する修正で対象の Symbol の Encoding をチェックして US-ASCII でなかったら無視するように条件分岐を追加しています。 NUL 文字を含む可能性があるのを排除するためかな? [ruby-core:105371] [Bug #18184]

[c8661de014] git 2021-09-22 16:20:02 UTC

version.h の日付更新

[fb976df81f] Burdette Lamar 2021-09-22 19:51:11 UTC

Range#% メソッドの rdoc 用コメントを追加しています。また Range クラスの rdoc 用コメントにメソッド一覧のクロスリファレンスを追加しています。 https://github.com/ruby/ruby/pull/4881

[e0c6e8c64a] Kazuhiro NISHIYAMA 2021-09-23 00:20:00 UTC

rdoc 用コメントのサンプル内で String#unpack を使っているところで String#unpack1 で足りるところは unpack1 を使うように変更しています。

[842a4cb915] Nobuyoshi Nakada 2021-09-22 14:16:27 UTC

marshal.c の to_be_skipped_id() というマクロを inline 関数に変更しています。

[64bdad5991] Nobuyoshi Nakada 2021-09-22 15:53:44 UTC

marshal.c の r_ivar() と w_ivar() からオブジェクトの flags の ruby2_keywords 用のビットフラグをチェック/更新する処理を rb_hash_ruby2_keywords() および rb_hash_ruby2_keywords_p() という static 関数に切り出すリファクタリング

[7cec727612] Nobuyoshi Nakada 2021-09-22 15:04:37 UTC

marshal.c で Marshal.load 処理中にインスタンス変数の数が大量でオーバーフローするほどになるような不正なバイト列を読んだ時のためにチェックして例外を発生させるようにしています。

[49af9012a2] Nobuyoshi Nakada 2021-09-23 07:02:44 UTC

7c0230b05d0978958f89434c84ddd9c82419c1a5 および 552728a23aeab0df598b356b19a573259e297d14 の続きで Marshal.load の処理で Symbol を読み込んだ時にその Encoding がバイト列に対して不正なものだったら例外を発生させるようにしています。 [ruby-core:105371] [Bug #18184]

[b42fe5937a] aycabta 2021-09-23 07:20:51 UTC

irb の補完処理で Symbol.all_symbols で取り出した Symbol を Encoding.default_external に encode しなおす時に Encoding::InvalidByteSequenceError が発生した場合に捕捉して例外を投げなおすようにしています。デバッグ用かな。

[8b48b57fd8] Nobuyoshi Nakada 2021-09-23 07:40:04 UTC

enumerator.c の rb_arithmetic_sequence_beg_len_step() の最初の RUBY_ASSERT() での引数のチェックを RBIMPL_HAS_ATTRIBUTE(nonnull) が偽の時だけするように preprocessor 分岐を追加しています。include/ruby/internal/intern/enumerator.h の宣言に RBIMPL_ATTR_NONNULL(()) をつけているので有効ならチェックは不要なので。

[e6118c8108] Jun Aruga 2021-09-22 07:51:53 UTC

GitHub Actions のいろんなコンパイラでのビルドを試す workflow で make コマンドを $make 変数にセットして -j オプションつきで実行させていたのをかわりに GNUMAKEFLAGS 環境変数にセットしておくように変更しています。環境変数に make というのがあると rubygems のテストが失敗することがあったそうです。

[ede95f541b] Nobuyoshi Nakada 2021-09-23 07:28:28 UTC

irb の補完処理で Symbol.all_symbols で取得した Symbol の処理時に Encoding::UndefinedConversionError 例外を捕捉して無視してたのをその親クラスの EncodingError でもっとまとめて捕捉するように変更しています。そうすると b42fe5937ab2a605a198ffb866db5ccda541568d で追加した Encoding::InvalidByteSequenceError の rescue もここでまとめてされるのでそちらは不要になりましたね。

[4704bc0976] aycabta 2021-09-23 09:02:02 UTC

ということで b42fe5937ab2a605a198ffb866db5ccda541568dirb の補完処理で Encoding::InvalidByteSequenceError を捕捉する rescue を追加したのを revert しています。