ruby-trunk-changes r51175 - r51194

今日は Random の実装の Linux 版 getrandom(2) システムコール対応や RubyVM::InstructionSequence#to_a の不具合修正などがありました。

nobu: r51175 2015-07-07 12:49:14 +0900

rb_check_id() と rb_check_symbol() で型変換の失敗時の例外でメッセージに渡されたオブジェクトを埋め込むのに PRIsVALUE を使ってエンコーディングを保持するようにしています。

ko1: r51179 2015-07-07 14:41:34 +0900

r51166 で残っていた vm_backtrace.c の #define VM_CHECK_MODE 2 を削除しています。

nobu: r51180 2015-07-07 15:02:21 +0900

rb_str_normalize_ospath() で不正なバイト列があった時の処理でポインタが進まず無限ループに陥る可能性があったのを修正しています。引数の文字列がファイルシステムから渡されたものならここにはまることはないはずとのことなので実害はあまりないのでしょうけど。

nobu: r51181 2015-07-07 15:25:55 +0900

random.c の fill_random_bytes() の実装を /dev/urandom デバイスファイルから読み込むケース(fill_random_bytes_urandom()) と Windows 版の CryptGenRandom() を利用するケース(fill_random_bytes_syscall()) で関数に分割するリファクタリングをしています。で、/dev/urandom より syscall のほうを優先するようにしています。

nobu: r51182 2015-07-07 15:26:06 +0900

r51181 で分割したうち fill_random_bytes_syscall() のほうで Linux での syscall() を使った getrandom(2) システムコールの呼び出しによる実装を追加しています。なるほど、/dev/urandom よりこちらを優先させたいということですね。

normal: r51183 2015-07-07 16:46:29 +0900

r51181 で分割した fill_random_bytes() で戻り値のチェックが反転していた不具合を修正しています。また fill_random_bytes_syscall() で一度 syscall() での呼び出しに失敗したら結果をキャッシュして再度システムコールを呼ばないようにしていましたが、その時の戻り値も間違っていたので修正しています。

normal: r51184 2015-07-07 16:48:25 +0900

compile.c の関数マクロ COMPILE_ERROR() で GET_THREAD() を何度も呼んでいたのをローカル変数に格納して使いまわすようにしています。 これもコードサイズ削減のためだそうです。

kazu: r51185 2015-07-07 18:20:25 +0900

r51174 と r51179 の ChangeLog エントリの typo 修正。

kazu: r51186 2015-07-07 18:21:11 +0900

r51182 での Linux 版の fill_random_bytes_syscall() での変数の定義漏れと文末のセミコロン抜けによるコンパイルエラー修正。これ normalperson さんも多分 Linux でテストしてたんだと思うんですけどなぜスルーされてたんでしょうね。不思議だ…。

usa: r51187 2015-07-08 00:41:57 +0900

r51163 で Array#sort! のメモリリークのテストのしきい値を 1.25 に上げたのを、さらに 1.3 に上げています。

svn: r51188 2015-07-08 00:42:37 +0900

version.h の日付更新。

usa: r51189 2015-07-08 00:57:12 +0900

r51175 で追加したテストが Encoding.default_external が UTF-8 であることに依存していたので EnvUtil.with_default_external を利用して前提条件を揃えるようにしています。

normal: r51190 2015-07-08 04:50:49 +0900

RubyVM::InstructionSequence#to_a で ISeq オブジェクトに配列化する時にキーワード引数の Symbol をダンプする処理が r49517 ([ruby-core:68031] [Bug #10831]) で壊れていたので修正しています。 [ruby-core:69891] [Bug #11338]

hsbt: r51191 2015-07-08 07:43:11 +0900

標準添付ライブラリ csv の rdoc 用コメントの typo 修正。 https://github.com/ruby/ruby/pull/958

nobu: r51192 2015-07-08 14:05:12 +0900

拡張ライブラリ socket と readline で SystemCallError 例外を発生させるのに errno にセットして rb_sys_fail() を呼んでいたのを、errno を引数で渡せる rb_syserr_fail() を利用して errno へのセットを避けるようにしています。

nobu: r51193 2015-07-08 14:05:27 +0900

拡張ライブラリ socket の BasicSocket#do_not_reverse_lookup と #do_not_reverse_lookup= の rdoc 用コメントのサンプルコードが逆になってたので入れ替えてます。

nobu: r51194 2015-07-08 15:09:09 +0900

rubygems の Gem::Resolver#resolve での依存関係解決で例外が発生した時にメッセージ出力用の IO が閉じられてなかったので ensure 節を追加して閉じるようにしています。