ruby-trunk-changes r49511 - r49531

今日は RubyGems の更新、psych の不具合修正などがありました。

hsbt: r49511 2015-02-05 22:42:45 +0900

RubyGems を最新版(commit hash 5c3b6f3) に更新しています。 https://github.com/rubygems/rubygems/pull/1115 https://github.com/rubygems/rubygems/pull/1139 https://github.com/rubygems/rubygems/pull/1142 https://github.com/rubygems/rubygems/pull/1156 などの細かな不具合修正、性能改善を取り込んでいるようです。

svn: r49512 2015-02-05 22:43:00 +0900

r49511 で新規追加されたファイルの svn property 設定。

marcandre: r49514 2015-02-06 05:06:11 +0900

doc/security.rdoc に send も immortal symbol を生成すると書かれていたのを、2.2.0 の Known Bug として記述を修正しています。 昨日の r49499 以降の一連の変更で修正したからですね。

svn: r49515 2015-02-06 05:06:24 +0900

version.h の日付更新。

nobu: r49516 2015-02-06 06:09:27 +0900

r49514 の doc/security.rdoc で Symbol を immortal 化する原因として ID2SYM() を使うと書かれていたのを SYM2ID() に修正しています。

nobu: r49517 2015-02-06 10:31:53 +0900

メソッド定義に **keywords のように "**" で任意のキーワード引数を Hash オブジェクトとして受け取る時に、キーを immortal symbol にしてしまう不具合があったのを修正しています。 メソッド定義で明記されているキーワード引数の名前のものにセットするまで ID 化せず VALUE のまま扱うようにしています。 [ruby-core:68031] [Bug #10831]

nobu: r49518 2015-02-06 11:33:38 +0900

check_funcall_missing() でメソッド名を Symbol に変換して渡していたのを ID のまま mid として扱うようにして SYM2ID() を呼ばないようにしています。

nobu: r49519 2015-02-06 11:33:41 +0900

classname() で SYM2ID() を呼んでいたのをやめて rb_check_id() で mortal symbol だったら名前の解決には利用しないようにしています。

nobu: r49520 2015-02-06 11:33:47 +0900

r45487 を revert しているそうです。大分前の Symbol GC 導入直後のものですね。 rb_alias_variable() と rb_method_entry_make() で SYM2ID(ID2SYM()) を呼んで強制的に immortal symbol にしているところを削除しています。 Symbol と ID の管理方法が変化して ID があるものは immortal なのでここで pin down する必要がなくなったとのこと。

tenderlove: r49524 2015-02-06 17:00:54 +0900

拡張ライブラリ psych で改行を含む正規表現オブジェクトを dump/load すると壊れるという不具合を修正しています。 https://github.com/tenderlove/psych/issues/222

nobu: r49525 2015-02-06 17:30:55 +0900

openssl のテストで OpenSSL 1.0.2 が wrap mode というのをサポートしていないため OpenSSL::Cipher::Cipher.new が OpenSSL::Cipher::CipherError 例外を発生させるのでその場合は無視するようにしています。 [Bug #10839]

nobu: r49526 2015-02-06 17:37:19 +0900

error.c の warn_print() から rb_encoding の指定も追加して文字列を作るところまでを warning_string() という関数に切り出し、というか置き換えて、出力は呼び元でそれぞれ rb_write_error_str() を利用するようにリファクタリングしています。

nobu: r49527 2015-02-06 17:37:24 +0900

error.c で rb_enc_warn()、rb_enc_warning() という全く同じ関数が2つコメントアウトされた状態で追加し、さらに rb_sys_enc_warning() という strerror(3) の文字列も追加する関数を追加しています。

nobu: r49528 2015-02-06 17:37:27 +0900

Dir.new や Dir.glob でファイルパスを含む警告メッセージを出力する時にファイルパスのエンコーディングを保持した文字列を作成するようにしています。

tenderlove: r49529 2015-02-06 17:50:00 +0900

拡張ライブラリ psych で循環参照をもつオブジェクトを dump した時にオブジェクトを記憶していなくて正しく参照をダンプできていなかったのを修正しているみたいです。 [ruby-core:66215] [Bug #10496]

nobu: r49531 2015-02-06 22:24:09 +0900

test/ruby/test_dir_m17n.rb の Dir.glob のテストで default_encoding を UTF-8 に設定してテストするようにしています。 また対象のディレクトリに File.chmod で読み込み権限を落としているのですが、File.readable? がちゃんと false になっている時だけテストするようにしています。 これ権限の設定と readable? のチェックは同じじゃないかと思ったのですが、File.readable? は eaccess(2) でチェックしているので root ユーザでの実行か、あとは Windows 版での実行時の考慮でしょうか。