ruby-trunk-changes r55282 - r55298

今日は拡張ライブラリ openssl の OpenSSL 1.1.0 対応のための変更群や Thread#report_on_exception, Thread.report_on_exception の追加、Proc を Symbol :call をブロック化したもので呼び出すと SEGV することがある不具合の修正などがありました。

rhe: r55282 2016-06-05 21:38:34 +0900

拡張ライブラリ openssl で OpenSSL 1.1.0 で deprecated とされた RAND_pseudo_bytes() が利用可能かチェックするようにして、利用できなかったら Random.pseudo_bytes を定義しないようにしています。 [ruby-core:75225] [Feature #12324]

rhe: r55283 2016-06-05 21:46:05 +0900

拡張ライブラリ openssl で OpenSSL 1.1.0 で導入された multi thread 対応で、ロック用の callback が不要になったのに対応するため、CRYPTO_lock() という関数が定義されているかどうかで判定して、新しい OpenSSL なら不要になったロック機構の初期化をやめています。 また CRYPTO_add() を使った参照数の管理をマクロ化してこれを利用するようにしています。 [ruby-core:75225] [Feature #12324]

mrkn: r55284 2016-06-05 22:09:43 +0900

OS X での c++ コンパイラ(CXX 変数)を選択する処理を configure.in 内で後ろのほうへ移動しています。 CC の内容が確定した後にするようにしているみたいですね。

rhe: r55285 2016-06-06 00:00:47 +0900

OpenSSL 1.1.0 からは鍵の構造体が opaque な宣言になっていて、内容が取得できなくなっていて、かわりに setter/getter が提供されているそうなのですが、setter では対象の値だけを渡すのではなくて n も渡さないといけなくなっていて、これまでの openssl の OpenSSL::PKey の各種鍵のクラスで key.e = 1 のようなメソッドでは値をセットできなくなったため、警告を出力するようにしています。また代替として set_key, set_pgp メソッドを追加しています。 [ruby-core:75225] [Feature #12324]

svn: r55286 2016-06-06 00:00:48 +0900

version.h の日付更新。

rhe: r55287 2016-06-06 00:35:12 +0900

r55285 の変更とも関連していますが OpenSSL 1.1.0 で構造体が opaque になったのにあわせて追加された setter/getter の関数は 0.9.8 には存在しないので、存在チェックしてなかったら代替関数やマクロを定義するようにしています。 [ruby-core:75225] [Feature #12324]

rhe: r55288 2016-06-06 01:18:38 +0900

拡張ライブラリ openssl で OpenSSL 1.1.0 で削除された関数 d2i_ASN1_BOOLEAN() の呼び出しをかわりに自前で実装しています。 内容は簡単だけど、なんでこんなプリミティブが消されてしまったんだろう。 [ruby-core:75225] [Feature #12324]

rhe: r55289 2016-06-06 01:36:39 +0900

拡張ライブラリ openssl で SSL_is_server() という関数の存在チェックをして、なかったら代替を実装するようにして ssl_info_cb() で利用するようにしています。 [ruby-core:75225] [Feature #12324]

nobu: r55290 2016-06-06 09:25:38 +0900

Thread が例外で終了した場合に標準エラー出力にバックトレースなどを出力するようにするフラグ Thread#report_on_exception およびインタプリタ全体の設定 Thread.report_on_exception を導入しています。 [ruby-core:45864] [Feature #6647]

rhe: r55291 2016-06-06 10:40:27 +0900

r55285 で拡張ライブラリ openssl に inline 関数を追加したので inline 修飾子の VC 対応のために ext/openssl/openssl_missing.h に #include "ruby/config.h" を追加しています。

duerst: r55292 2016-06-06 13:16:49 +0900

r55277 で String#downcase などのメソッド群のデフォルトが :lithuanian になったのでテストで明示的に :lithuanian を指定していたところを省略しています。

duerst: r55293 2016-06-06 13:37:10 +0900

rb_str_casemap() で onigenc_unicode_case_map() を直接呼んでいたのを、rb_encoding のメンバにセットされている関数ポインタ case_map を介して呼ぶように修正しています。

rhe: r55294 2016-06-06 17:11:24 +0900

拡張ライブラリ openssl の OpenSSL 1.1.0 対応の一部。 r55287 で OpenSSL::Cipher の中のポインタの確保を ZALLOC() から EVP_CIPHER_CTX_new() に置き換えたのに対応して ossl_cipher_free() で解放する時も EVP_CIPHER_CTX_free() を利用するようにしています。 [ruby-core:75225] [Feature #12324]

duerst: r55295 2016-06-06 17:29:38 +0900

test/ruby/enc/test_case_comprehensive.rb でループ内でテストメソッドを動的に定義しているところで文字列の encode をしているところをループ外に出してテストの高速化を図っています。

duerst: r55296 2016-06-06 18:36:36 +0900

大文字小文字を変換するメソッド群で Unicode の casemap のサポートが UTF-8 だけだったのを UTF-16BE/LE と UTF-32BE/LE もサポートするようにしています。

nobu: r55297 2016-06-06 18:37:59 +0900

Proc オブジェクト内で return しているものを :call をブロック化したもので呼び出すと SEGV するという不具合を修正しています。 [ruby-core:75856] [Bug #12462]

kazu: r55298 2016-06-06 23:04:01 +0900

appveyor.yml でビルド時に利用する libressl を 2.3.5 に更新しています。