ruby-trunk-changes r51455 - r51465

今日は主に拡張ライブラリ openssl のリファクタリングや、標準添付ライブラリ net/http の不具合修正などがありました。

tenderlove: r51455 2015-08-01 03:20:31 +0900

r51380 や r51381 の続きで拡張ライブラリ openssl の OpenSSL::SSL::SSLContext#tmp_dh_callback の初期化を他のインスタンス変数と同じく nil で初期化しておいて、デフォルト値を返す挙動は reader method で行うように変更しています。

svn: r51456 2015-08-01 03:20:48 +0900

version.h の日付更新。

tenderlove: r51457 2015-08-01 03:29:12 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLSocket で SSLContext から tmp_ecdh_callback をコピーして保持してましたが常に context 経由で取得するようにリファクタリングしています。

tenderlove: r51458 2015-08-01 03:44:12 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLContext#setup で tmp_dh_callback を設定する時に引数を VALUE の配列で渡していたのを Array オブジェクトで渡して rb_apply() を利用することで rb_protect() の呼びかたをシンプルにするリファクタリング

tenderlove: r51459 2015-08-01 03:51:30 +0900

r51457 で拡張ライブラリ openssl の OpenSSL::SSL::SSLSocket の tmp_ecdh_callback を SSLContext 経由で取得するようにしたのと同様に tmp_dh_callback も SSLContext 経由で取得するようにしています。

tenderlove: r51460 2015-08-01 04:08:40 +0900

r51457 や r51459 の続きで拡張ライブラリ openssl の tmp_dh_callback, tmp_ecdh_callback のコールバックを呼び出す ossl_call_tmp_dh_callback() や ossl_call_tmp_ecdh_callback() から true/false でなく直接 PKey オブジェクトを返すようにするリファクタリング

tenderlove: r51461 2015-08-01 07:01:49 +0900

拡張ライブラリ openssl の ossl_ssl_def_const() という関数マクロで定数を INT2NUM() で変換するようにしていたのを LONG2NUM() を使うように修正しています。対象の定数群が OpenSSL で long として宣言されていたそうです。 https://github.com/openssl/openssl/blob/34750dc25d74e3db4c1ba43cd219d3f4825e4c65/include/openssl/ssl.h#L391

tenderlove: r51462 2015-08-01 09:12:46 +0900

拡張ライブラリ openssl で OpenSSL::SSL::SSLContext#options および #options= を OpenSSL の SSL_CTX_get_options() と SSL_CTX_set_options() の wrapper メソッドとして定義して、options をインスタンス変数として持たせて ossl_sslctx_setup() でそれを参照して SSL_CTX_set_options() で設定していたのをやめています。

nobu: r51463 2015-08-01 13:47:53 +0900

同一のファイルを複数の Thread からロードしないように排他処理するための ThreadShield というオブジェクトの rb_thread_shield_release(), rb_thread_shield_destroy() などで mutex を取り出すのに関数マクロ GetThreadShieldPtr() を直接呼んでいたのを、NULL チェックを行う thread_shield_get_mutex() という関数を定義してこれを使うようにしています。

ktsj: r51464 2015-08-01 17:22:50 +0900

標準添付ライブラリ net/http の Net::HTTPResponse#inflater で圧縮された内容を展開する時に ensure 節で $! で例外を退避しておいて、無条件でそれを再 raise していたので、例外が発生していたわけでない時に展開で失敗すると nil を raise してしまって TypeError が発生するという不具合があったのを修正しています。 [ruby-core:68846] [Bug #11058]

ktsj: r51465 2015-08-01 17:23:32 +0900

標準添付ライブラリ net/http でサイズが 0 で inflate に gzip が指定されたレスポンスがエラーになっていたのを修正しています。 [ruby-core:68846] [Bug #11058]