ruby-trunk-changes r55148 - r55165

今日は拡張ライブラリ openssl で OpenSSL の 0.9.8 以上をサポート対象とするように対象のバージョンの引き上げや、正規表現コンパイル時の不具合修正などがありました。

nobu: r55148 2016-05-25 00:21:53 +0900

r55142 のコンパイラオプション -fexcess-precision=standard や -fp-model precise を ruby_cflags に入れるようにしていたのを XCFLAGS に追加して、ruby 本体のビルドにのみ利用するようにしています。 [ruby-core:75658] [Bug #12409]

svn: r55149 2016-05-25 00:21:54 +0900

version.h の日付更新。

nobu: r55150 2016-05-25 00:23:06 +0900

rb_scan_args_set() で引数の数のチェックを最後の option 引数の Hash のぶんを削ってから rb_check_arity() でチェックするようにして、引数の数が間違っている時に余計な option 引数の処理をスキップできるようにしています。

rhe: r55151 2016-05-25 01:27:11 +0900

拡張ライブラリ openssl の OpenSSL::PKey::EC#generate_key を #generate_key! に改名して、互換性のため #generate_key は alias として残しています。他の OpenSSL::PKey のクラスとメソッド名を一致させるため。 [ruby-core:45541] [Bug #6567]

rhe: r55152 2016-05-25 01:30:15 +0900

拡張ライブラリ openssl に OpenSSL::PKey::EC.generate メソッドを追加しています。これも他の PKey と一致させるため。また OpenSSL::PKey::EC#initialize のエラーチェック強化もしています。 [ruby-core:45541] [Bug #6567]

duerst: r55153 2016-05-25 08:01:39 +0900

Unicode の casemap 処理のフラグで ONIGENC_CASE_UP_SPECIAL と ONIGENC_CASE_DOWN_SPECIAL の考慮が漏れていたところを修正しています。

naruse: r55154 2016-05-25 13:21:31 +0900

正規表現コンパイル時に compile_length_tree() を再帰的に呼び出しているところでエラーがかえってきた場合が考慮されていなかったので、例外を発生させるようにしています。 ある種の不正な正規表現Regexp.new で作ろうとすると SEGV することがあったようです。 [ruby-core:75694] [Bug #12418]

naruse: r55155 2016-05-25 13:21:32 +0900

regcomp.c に onig_is_prelude() という関数があって Thread::MUTEX_FOR_THREAD_EXCLUSIVE という定数の有無で prelude 内かどうか判定するようにしていて、デバッグ出力を抑制するようにしてましたが、これは削除しています。 現在 prelude で正規表現は使っていないとのこと。

nobu: r55156 2016-05-25 15:05:47 +0900

tool/fake.rb で RbConfig::CONFIG["buildlibdir"] にもビルドディレクトリを格納するようにしています。で RbConfig::MAKEFILE_CONFIG["libdirname"] には "buildlibdir" のほうを入れるようにしています。 mkmf.rb の MakeMakefile#configuration で builddir は filter されるからということですが、どこだろう。

nobu: r55157 2016-05-25 15:05:48 +0900

regcomp.c のデバッグ用の出力の条件を ONIG_DEBUG の定義から ONIG_DEBUG_COMPILE と ONIG_DEBUG_MATCH, ONIG_DEBUG_PARSE_TREE の定義と細かくわけています。

nobu: r55158 2016-05-25 17:11:36 +0900

r55144 の rb_scan_args_verify() の fmt 文字列のチェックをさらに分割しています。ちょっと読む気になれないですが cygwin でのビルドエラーの対処らしいです。 [ruby-core:75714] [Bug #12426]

nobu: r55159 2016-05-25 17:13:37 +0900

関数版のほう(従来版)の rb_scan_args() で fmt が数字2文字の時の n_trail の処理はその他の分岐の時の処理とまとめられるので不要な分岐と goto を除去しています。

rhe: r55160 2016-05-25 17:46:39 +0900

拡張ライブラリ openssl の extconf.rb で OPENSSL_FIPS マクロのチェックをして HAVE_OPENSSL_FIPS を定義していたのを削除して、OPENSSL_FIPS を直接 #ifdef でチェックするようにしています。

rhe: r55161 2016-05-25 17:46:40 +0900

ext/openssl/ossl.h と ext/openssl/openssl_missing.h から C++ の時に extern "C" { } でくくるようにしていたのを削除しています。これらのヘッダは openssl 内のソースからしか #include されないので不要だろうということで、まあそうですね。

rhe: r55162 2016-05-25 17:50:03 +0900

拡張ライブラリ openssl のサポート対象から OpenSSL 0.9.6 と 0.9.7 を外して 0.9.8 以降でないとビルドできないように static_assert の条件を引き上げています。これで不要になった have_func のチェックなどを整理しています。

naruse: r55163 2016-05-25 18:45:22 +0900

r55154 と似てますが、正規表現の文字クラスのところに \ooo で大きすぎる数値が書かれていた時に例外を発生させるようにして、SEGV などするのを防いでいます。いちおう 3文字までしか数字はみないようになっていますが 0400〜0777 の範囲を弾くようにしています。 [ruby-core:75702] [Bug #12420] [ruby-core:75709] [Bug #12423]

duerst: r55164 2016-05-25 19:07:19 +0900

Unicode の casemap 処理で DOTLESS_i の文字の upcase だけは専用の分岐を入れています。 folding に含まれてないからとのこと。

naruse: r55165 2016-05-25 20:51:37 +0900

r55163 の追加修正。 正規表現の文字クラスの \ooo による記述を unescape する時に高々3文字までしか数字をみないようにしています。 [ruby-core:75702] [Bug #12420] [ruby-core:75709] [Bug #12423]