ruby-trunk-changes 2021-08-18

今日はマシンスタックのオーバーフローチェックの不具合修正などがありました。

[4814528296] Akinori MUSHA 2021-08-17 12:44:41 UTC

File::Stat#size? メソッドの rdoc 用コメントに nil が返ってくる場合があることを明記する修正。

[36ae44ce2c] Nobuyoshi Nakada 2021-08-11 01:17:11 UTC

拡張ライブラリ date のタイムゾーンについてのテーブルが定義されてる ext/date/zonetab.h を更新しています。

[6a9bfa4d93] git 2021-08-17 15:00:54 UTC

version.h の日付更新

[58bd943436] "S.H" 2021-08-17 17:25:19 UTC

complex.c、math.c、rational.c などでそれぞれ独自に f_boolcast() というマクロを定義して使っていたのを 64adeeadaa8d7fe210d0605eb6c9b0b1dcf49746378e8cdad69e6ba995a024da2957719789f0679e で導入した RBOOL マクロを利用するようにリファクタリングしています。

[574f3af36e] Nobuyoshi Nakada 2021-08-18 05:09:29 UTC

チケットをみると再帰的な参照を持つ Array や Hash に JSON.dump を使うと stack overflow を起こし、場合によっては SEGV することがあるという不具合に対する修正です。 JSON.generate はネストの深さに制限を入れてるけど JSON.dump は固定の制限はないので、json に限らず一般的な stack overflow のチェックで SystemStackError 例外が発生するのですが、チェックに失敗して guard page に突入してしまう場合があったみたいです。 [ruby-core:104963] [Bug #18084]

[95e7aed82b] Nobuyoshi Nakada 2021-08-18 05:11:34 UTC

574f3af36ea008896419d2e2407f8fce83bdcd2e の続きで SIGILL のシグナルハンドラで system stack の overflow チェックを macOS でのみ呼んでいたのを Linux の時にも呼ぶようにしています。stack overflow 時に SIGILL シグナルが発生することがあるみたいです。 [ruby-core:104963] [Bug #18084]

[d668cd188c] John Hawthorn 2021-08-16 19:51:11 UTC

numeric.c の Integer オブジェクトの VALUE を C の整数型に変換する関数群で rb_num_negative_int_p() を使っていたところを FIXNUM_NEGATIVE_P() マクロに変更しています。rb_num_negative_int_p() はメソッド呼び出しをするので遅いのと、おそらく再定義された時の対策のため?