ruby-trunk-changes r51375 - r51392

今日は拡張ライブラリ openssl の一部の実装の ruby 化や SIGPIPE のデフォルトのシグナルハンドラの設定の変更などがありました。

tenderlove: r51375 2015-07-26 03:44:54 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLContext の initialize メソッドの実装を C から ext/openssl/lib/openssl/ssl.rb での Ruby 実装に変更しています。

svn: r51376 2015-07-26 03:45:18 +0900

version.h の日付更新。

svn: r51377 2015-07-26 03:45:51 +0900

r51375 の ChangeLog エントリの行末の空白除去。

tenderlove: r51378 2015-07-26 04:53:16 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLContext で初期化するインスタンス変数に @alpn_protocols と @alpn_select_cb を追加しています。

tenderlove: r51379 2015-07-26 06:23:22 +0900

拡張ライブラリ openssl のテストに OpenSSL::SSL::SSLSocket に暗号化に "DH" が指定された時にコールバックを指定しなくてもデフォルトの実装が利用されて動くことを確認するテストケースを追加しています。

tenderlove: r51380 2015-07-26 07:51:20 +0900

拡張ライブラリ openssl で暗号化方式に DH を指定した時のデフォルトのコールバックを保持する OpenSSL::SSL::SSLContext のインスタンス変数 @tmp_dh_callback の初期化を Ruby 実装にして lambda で定義するように変更しています。

tenderlove: r51381 2015-07-26 08:16:49 +0900

r51380 の続きというか追随で、OpenSSL::SSL::SSLContext#tmp_dh_callback= で nil を代入した時に、インスタンス変数を nil にせずにデフォルトの lambda オブジェクトを格納するようにしています。

tenderlove: r51382 2015-07-26 08:35:49 +0900

拡張ライブラリ openssl の OpenSSL::PKey::DH::DEFAULT_512 および OpenSSL::PKey::DH::DEFAULT_1024 という定数の実装を C 拡張から Ruby 版に変更しています。また DEFAULT_TMP_DH_CALLBACK も OpenSSL::PKey::DEFAULT_TMP_DH_CALLBACK に名前空間を移動しています。

svn: r51383 2015-07-26 08:36:01 +0900

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

hsbt: r51384 2015-07-26 08:49:35 +0900

rubygems のテストで OpenSSL::SSL::SSLContext#tmp_dh_callback の鍵長の指定をブロックに渡された値じゃなく常に 2048 を使うようにしています。 r50972 でテストのエラーを抑制するようにしたのを再修正していますが、なんかよくわかりませんがコールバックには推奨される鍵長とか、利用可能な最小の鍵長とかが渡されるわけではないみたいです。じゃあなんのためにあるんだ…? https://github.com/rubygems/rubygems/pull/1290

hsbt: r51385 2015-07-26 09:10:38 +0900

gems/bundled_gems の power_assert のバージョンを 0.2.4 に更新しています。

tenderlove: r51386 2015-07-26 10:09:31 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLContext#servername_cb のテストを追加しています。

tenderlove: r51387 2015-07-26 10:29:02 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLContext#servername_cb で新たな OpenSSL::SSL::SSLContext オブジェクトを返した場合にそれが GC で回収されてしまわないように、ブロックから返されたオブジェクトを OpenSSL::SSL::SSLSocket の @context にセットしなおすようにしています。

nobu: r51388 2015-07-26 11:20:24 +0900

load.c の rb_construct_expanded_load_path() の引数 type の型に int ではなくてすぐ上で宣言されている enum 型を指定するようにしています。

nobu: r51389 2015-07-26 11:29:03 +0900

デフォルトのシグナルハンドラを SIGSYS というシグナルにも追加して、何もしないようにしています。対応するシステムコールがない時に発生するみたいですが知らなかったなぁ。コミットメッセージから察するに無視しておくと戻り値などで errno=ENOSYS のエラーがかえってくるので Ruby 側は Errno::ENOSYS が発生するように対応される(各所で)というものみたいです。

nobu: r51390 2015-07-26 14:37:59 +0900

r31760 および r31761 で SIGPIPE のシグナルハンドラの扱いについて普段 SIG_IGN にして exec 前に SIG_DFL に戻すようにしていたのを、r32178 でやっぱり空のシグナルハンドラ(process.c の sig_do_nothing()) を設定するように再変更していましたが、やっぱり常に空のシグナルハンドラを設定しておくようにしています。ついでに r51389 で signal.c に追加した sig_do_nothing() と定義を共有するようにしています。
コミットログにあった https://gist.github.com/sorah/831169 との関連はよくわかりませんが…。昔は sigpipe() が空じゃなかったんですかね。

nobu: r51391 2015-07-26 15:24:18 +0900

vm_insnhelper.c の vm_setivar() でコンパイラの警告除去のための明示的キャストを追加。

nobu: r51392 2015-07-26 19:21:35 +0900

r51347 での拡張ライブラリ openssl の TLS 拡張 ALPN のサポート追加で HAVE_SSL_CTX_SET_ALPN_SELECT_CB による条件コンパイルの分岐が漏れていたのを修正しています。 [Feature #9390]