ruby-trunk-changes r55120 - r55137

今日は拡張ライブラリ bigdecimal や openssl の不具合修正がありました。

normal: r55120 2016-05-23 08:09:38 +0900

Dir#close の rdoc 用コメントに重複した close で IOError が発生しなくなったことを追記しています。
[ruby-core:75679] [Bug #12413]

svn: r55121 2016-05-23 08:09:39 +0900

version.h の日付更新。

naruse: r55122 2016-05-23 12:23:24 +0900

array.c の rb_ary_fill() でローカル変数 item が未初期化で利用されるという警告(実際にはブロック渡しでない時のみ使われるので未初期化で使われることはないみたいですが、コンパイラにはわからない)を抑制するため Qundef で初期化しています。

nobu: r55123 2016-05-23 12:30:30 +0900

拡張ライブラリ bigdecimal の GetVpValueWithPrec() で Float::INFINITY や Float::NAN と比較しようとすると FloatDomainError 例外が発生するのを抑制して、nil を返すようにしています。 GetVpValueWithPrec() で引数が Float の INFINITY だった場合を考慮するようにしています。 [ruby-core:75682] [Bug #12414]

nobu: r55124 2016-05-23 12:47:11 +0900

rb_scan_arg() のマクロ版から呼ばれる rb_scan_args0() で引数の数が一致しない場合 rb_raise() ではなく rb_fatal() で強制終了させるようにしています。

nobu: r55125 2016-05-23 13:19:43 +0900

r55124 の続き。 マクロ版の rb_scan_arg() で引数の数の不一致や fmt 文字列が期待した内容でない時は gcc 4.4 以降ではコンパイル時エラーにするようにしています。

nobu: r55126 2016-05-23 13:31:54 +0900

拡張ライブラリ tk の cbsubst_table_setup() で変数に volatile 修飾子をつけるかわりに RB_GC_GUARD() を使うように修正しています。

nobu: r55127 2016-05-23 13:31:55 +0900

拡張ライブラリ dbm, sdbm, tk などでもローカル変数の不要な volatile 修飾子を外しています。

nobu: r55128 2016-05-23 13:40:43 +0900

拡張ライブラリ tk で引数を Fixnum に変換後に taint チェックしていたのを消しています。 nil や fixnum は tainted にならないからとのこと。

usa: r55129 2016-05-23 15:55:48 +0900

r55123 で拡張ライブラリ bigdecimal の Float::INFINITY などの対応をした時に isfinite() を呼んでいましたが Windows ではビルドできないので、finite() を呼ぶ代替のマクロ定義を追加するようにしています。

nobu: r55130 2016-05-23 19:35:37 +0900

r55129 の ChangeLog エントリの typo 修正。

nobu: r55131 2016-05-23 19:45:13 +0900

r55125 で rb_scan_args0() で不正な fmt や引数の数の不一致をコンパイルエラーにしようとしたのを revert しています。拡張ライブラリ readline で最適化で消えずにエラーになったみたいです。

rhe: r55132 2016-05-23 19:47:37 +0900

拡張ライブラリ openssl で OpenSSL の RND_egd(), RND_egd_bytes() などの関数がエラー時に -1 を返すのに 0 をエラーとしてチェックしていたのを修正しています。また RND_pseudo_bytes() は 0 または -1 をエラーとして返すのでこれもチェック方法を修正しています。 0 は返す乱数が暗号論的強度を持ってない時に返すみたいです。また -1 は関数がサポートされてない時に返すようです(RND_bytes() も同様)。 参考URL: https://www.openssl.org/docs/manmaster/crypto/RAND_bytes.html https://www.openssl.org/docs/manmaster/crypto/RAND_egd.html ついでに RND_bytes() を呼び出したエラー時の例外発生の処理を ossl_raise() を使うようにリファクタリングしています。 [ruby-core:63795] [Bug #10053]

usa: r55133 2016-05-23 20:21:11 +0900

r55129 の続き。 HAVE_ISFINITE のチェックでは不十分だったようで cygwin で警告が出るそうなので defined(isfinite) で直接 isfinite のマクロ定義がないかもチェックするようにしています。 [ruby-core:75691] [Bug #12417]

rhe: r55134 2016-05-23 20:40:07 +0900

拡張ライブラリ openssl で NUL 文字終端が期待されている文字列を渡すところでは StringValueCStr() で変換するようにしています。また例外メッセージへの埋め込み時に PRIsVALUE を利用して VALUE のまま埋め込むようにしています。

rhe: r55135 2016-05-23 21:10:38 +0900

拡張ライブラリ openssl の Init_openssl() で ossl_raise() を利用するより前にグローバル変数 dOSSL の初期化を行うようにして初期化前に利用されるのを避けるようにしています。 [ruby-core:58264] [Bug #9101]

nobu: r55136 2016-05-23 21:33:39 +0900

r55133 からの続きで拡張ライブラリ bigdecimal で isfinite() がない時に finite() を使うようにマクロ定義していた部分を include/missing.h に移動しています。 numeric.c にも同様の定義があったのでこれも移動しています。 HAVE_FINITE のチェックはしなくていいのかな。

kazu: r55137 2016-05-23 22:26:22 +0900

ChangeLog エントリのインデント修正。