ruby-trunk-changes 2021-06-26

今日は RubyVM::AST の実装の不具合修正や文字列のエンコーディング変換の C API の修正などがありました。

[68e1dc5172] Yusuke Endoh 2021-06-25 15:13:47 UTC

fb01411ae842dbcc16d18dec2216fa2719649dff で構造体 rb_ast_body_t のサイズ削減のために追加した関数 ast_line_count() で rb_ast_body_t::script_lines に Qfalse がセットされている時にチェックせずに T_ARRAY または T_FIXNUM として扱おうとしてしまってたので修正しています。構文エラーで parse 失敗してた時に起きうるみたいです。

[c86f03be55] git 2021-06-25 15:15:38 UTC

version.h の日付更新

[457a4913be] Yusuke Endoh 2021-06-25 17:29:12 UTC

include/ruby/internal/attr/deprecated.h の RBIMPL_ATTR_DEPRECATED() マクロ定義で __attribute__*1 が Coverity Scan による静的チェック時にうまくいかないことがあるみたいで、__COVERITY__ マクロが定義されている時には空の定義をするように preprocessor 条件を追加しています。

[391abc543c] Nobuyoshi Nakada 2021-06-26 07:05:15 UTC

C API rb_str_conv_enc_opts() で変換元の文字列が ASCII 文字のみかどうかのチェック時に、引数で渡された変換元の Encoding と文字列オブジェクトに設定されてる Encoding が一致してない場合に enc_coderange_scan() を呼び出して文字列全体をチェックするようにしています。しかし一致してる時に呼ばれる is_ascii_string() もその先で enc_coderange_scan() を呼ぶ場合があるけど、文字列オブジェクトに coderange がキャッシュされてると内容と一致してないことがあるから信用してはいけないってことかな。

*1:__deprecated__