Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2015-07-27 ruby-trunk-changes r51393 - r51408

[][]ruby-trunk-changes r51393 - r51408

今日は主にビルドプロセスの修正がありました。

nobu: r51393 2015-07-27 10:55:58 +0900

win32/Makefile.sub の clean-ext ターゲットで先に ext に移動してから for /R を利用するようにしたりメッセージの内容を common.mk にそろえるなどの変更。

svn: r51394 2015-07-27 10:56:09 +0900

version.h の日付更新。

nobu: r51395 2015-07-27 11:21:13 +0900

拡張ライブラリ io/console の extconf.rb で $nmake という変数をチェックしているところで中身が "n" かどうかチェックしていましたが、nmake の時は $nmake は "m" になるみたいで比較する文字列を修正しています。また Windows 版では sys/ioctl.h ヘッダのチェックをしないようにしています。

usa: r51396 2015-07-27 12:21:53 +0900

次の r51397 の ChangeLog エントリだけコミットされたようです。

usa: r51397 2015-07-27 12:22:28 +0900

r51396 の ChangeLog エントリのぶんの本体のコミットです。 test/openssl/test_ssl.rb で UNIXSocket.pair を使ってテストしているところを、ソケットの作成を socketpair というユーティリティメソッドに切り出して UNIXSocket が未定義(Windows)の時は Socket.pair を使うようにして Windows でもテストが動くようにしています。

nobu: r51398 2015-07-27 12:41:55 +0900

common.mk の make clean-local の削除対象に version.i や bisect.sh enc/jis などを追加しています。

nobu: r51399 2015-07-27 12:42:12 +0900

make clean と distclean の依存関係の clean-local と clean-platform の順序を入れ換えています。

nobu: r51400 2015-07-27 12:44:00 +0900

make realclean-local から make distclean-local へ prelude.c や miniprelude.c の削除を移動しています。生成されるのがビルドディレクトリだからとのこと。distclean と realclean って掃除する対象のディレクトリが異なるんですね(in-place でビルドしてると同じですけど)。

nobu: r51401 2015-07-27 12:45:11 +0900

拡張ライブラリ fiddle の extconf.rb で $LOCAL_LIBS や $INCFLAGS に libffi のパスを追加する時に直接パスを指定するのではなくて $(LIBFFI_DIR) の変数参照にして埋め込むようにしています。 make 時の環境変数での指定が効くようにするんですね。

nobu: r51402 2015-07-27 12:46:07 +0900

ext/fiddle/depend の distclean-libffi ターゲットで "." からはじまる隠しディレクトリも削除するようにしています。

ko1: r51403 2015-07-27 13:25:11 +0900

template/id.h.tmpl から未使用になっていた ID2ATTRSET() というマクロ定義を削除しています。

nobu: r51404 2015-07-27 16:28:36 +0900

test/lib/test/unit.rb に make test-all のテストケースの実行順序を指定する --test-order オプションを追加しています。

nobu: r51405 2015-07-27 21:00:10 +0900

r51404 の変更でメソッド再定義の警告除去のため undef を追加し、未初期化インスタンス変数の参照の警告除去のために defined? でのチェックを追加しています。

kazu: r51406 2015-07-27 22:35:04 +0900

r51382 と r51396 の ChangeLog エントリの typo 修正。

kazu: r51407 2015-07-28 00:17:53 +0900

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

svn: r51408 2015-07-28 00:18:08 +0900

version.h の日付更新。

2015-07-26 ruby-trunk-changes r51375 - r51392

[][]ruby-trunk-changes r51375 - r51392

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

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

拡張ライブラリ opensslOpenSSL::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

拡張ライブラリ opensslOpenSSL::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

拡張ライブラリ opensslOpenSSL::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 の鍵長の指定をブロックに渡された値じゃなく常に 1024 を使うようにしています。 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

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

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

拡張ライブラリ opensslOpenSSL::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 での拡張ライブラリ opensslTLS 拡張 ALPN のサポート追加で HAVE_SSL_CTX_SET_ALPN_SELECT_CB による条件コンパイルの分岐が漏れていたのを修正しています。 [Feature #9390]

2015-07-25 ruby-trunk-changes r51365 - r51374

[][]ruby-trunk-changes r51365 - r51374

今日は Random の Linux 版の実装でブロックしないようにする変更などがありました。

ko1: r51365 2015-07-25 04:49:16 +0900

構造体メンバ struct rb_iseq_constant_body::catch_table の型に const 修飾子を追加しています。

svn: r51366 2015-07-25 04:49:35 +0900

version.h の日付更新。

ko1: r51367 2015-07-25 05:58:09 +0900

構造体メンバ struct rb_iseq_constant_body::param::opt_table の型に const 修飾子を追加しています。 そのために(ついでに?) iseq_set_arguments() からキーワード引数コンパイル部分を iseq_set_arguments_keywords() に切り出しています。

ko1: r51368 2015-07-25 06:01:09 +0900

構造体メンバ struct rb_iseq_constant_body::line_info_table の型に const 修飾子を追加しています。

ko1: r51369 2015-07-25 06:44:14 +0900

rb_call_info_t::index や struct rb_iseq_constant_body のサイズを表すメンバの型をのきなみ int -> unsigned int に変更しています。

nobu: r51370 2015-07-25 10:48:47 +0900

rb_str_hash_cmp() で文字列の比較をするときに、まず長さが一致するかをチェックしてから rb_str_comparable() を呼び出すようにしています。また fstring のテーブルでの同値性チェックのための fstring_cmp() で rb_str_hash_cmp() を使っていたのを、似たような実装で rb_str_comparable() を呼び出すかわりに Encoding を比較するような定義に書きかえています。 fstring では coderange の比較は不要なんでしょうか?

nobu: r51371 2015-07-25 10:48:53 +0900

str_replace() で分岐によって str_replace_shared() で既に呼び出し済みの rb_enc_cr_str_exact_copy() が再度呼ばれていたので、もう一方の分岐でのみ呼び出すように修正しています。

nobu: r51372 2015-07-25 11:05:34 +0900

String#replace の時の str_replace_shared_without_enc() でワイド文字のエンコーディングでの終端文字に対応しています。

nobu: r51373 2015-07-25 11:18:32 +0900

iseq.c で RARRAY_LEN() に対するループのカウンタに long 型の変数を利用するように修正しています。

nobu: r51374 2015-07-25 21:03:50 +0900

r51182 で Linux において Random の実装でシステムコール getrandom(2) (syscall(SYS_getrandom)) を利用するようにしましたが、エントロピーが枯渇している時にブロックしないように flags に GRND_NONBLOCK を渡すように修正しています。 [ruby-core:70114] [Bug #11395]

2015-07-24 ruby-trunk-changes r51359 - r51364

[][]ruby-trunk-changes r51359 - r51364

今日は fstring の共有する文字列フラグインスタンス変数などのオブジェクトの付随情報は共有させないようにする修正などがありました。

nobu: r51359 2015-07-24 16:35:38 +0900

Filename.extname の rdoc 用コメントにディレクトリ名部分にドットを含むパスを渡した時の挙動の例を追記して、またテストケースにもディレクトリ部分を含む例を追加しています。 https://github.com/ruby/ruby/pull/978

nobu: r51360 2015-07-24 16:38:37 +0900

fstring の管理テーブルに登録する文字列は taint フラグインスタンス変数を持たず、クラスも String 自体(子クラスのインスタンスではない)ものを登録するようにしています。その判定のために BARE_STRING_P() というマクロを導入し、この条件を満たさない文字列が rb_fstring() に渡されたら新たに bare な文字列オブジェクトを作ってそれを登録し、それとバッファを共有する文字列にして返すようにしています。 rb_fstring() に渡した文字列の taint フラグが引き継がれない不具合を修正しています。 [ruby-dev:49188] [Bug #11386]

svn: r51361 2015-07-24 16:38:47 +0900

version.h の日付更新。

ngoto: r51362 2015-07-24 20:29:49 +0900

標準添付ライブラリ rinda のテストで IPv6 loopback アドレス(::1)を利用しないようにしています。 IPv6 のアドレスのテストで ::1 しかなかったらテストを skip するようにしています。 [ruby-dev:49199] [Bug #11394]

nobu: r51363 2015-07-24 21:27:32 +0900

r51360 の続き。 str_new_frozen() では taint フラグはコピーしないようにしています。 [ruby-dev:49188] [Bug #11386]

nobu: r51364 2015-07-24 21:29:57 +0900

st.c で要素の同値性チェックをする EQUAL() という関数マクロで第2引数と第3引数の両方に key を渡すようにしていたのを、第3引数には st_table_entry * を受け取って ent->key と辿って比較するようにすることで第2引数が検索したいキーで第3引数はテーブルのエントリになるようにしています。

2015-07-23 ruby-trunk-changes r51344 - r51358

[][]ruby-trunk-changes r51344 - r51358

今日は force_encoding したEncodingに対して不正の文字を持つ文字列の reverse の不具合修正や、openssl の機能追加などがありました。

nobu: r51344 2015-07-22 23:44:20 +0900

String#reverse で文字列の Encoding に対して不正な文字を持つ文字列を force_encoding してから 2回 reverse を呼ぶと SEGV する不具合を修正しています。 String#reverse で元の String オブジェクトの coderange を変更してしまっていたのを修正しているようです。 [ruby-dev:49189] [Bug #11387]

kazu: r51345 2015-07-23 00:16:15 +0900

r51327、r51335、r51341 の ChangeLog エントリの typo 修正。

svn: r51346 2015-07-23 00:16:32 +0900

version.h の日付更新。

tenderlove: r51347 2015-07-23 03:31:42 +0900

拡張ライブラリ opensslOpenSSL の ALPN という TLS 拡張機能のサポートを追加しています。 ALPN とはサーバ/クライアント間でのプロトコルネゴシエーションのための機能で SPDY や HTTP2 で利用されるものだそうです。 OpenSSL::SSL::SSLContext#alpn_protocols= で利用できるプロトコル群を指定したり、OpenSSL::SSL::SSLcontext#alpn_select_cb で Proc オブジェクトを登録してプロトコルの選択する処理を渡せるようになったりするようです。 [Feature #9390]

tenderlove: r51348 2015-07-23 03:34:45 +0900

拡張ライブラリ openssl で ECDH (楕円曲線 Diffie-Hellman による鍵共有)のコールバックを登録する機能をサポートするようにしています。 OpenSSL::SSL::SSLContext#tmp_ecdh_callback= で Proc オブジェクトを登録できて OpenSSL のコールバックから呼ばれるようです。 [ruby-core:69986] [Feature #11356]

tenderlove: r51349 2015-07-23 04:04:58 +0900

r51347 の openssl の ALPN サポート追加で OpenSSL::SSL::SSLContext#alpn_select_cb= で設定した Proc オブジェクトが返した文字列インスタンス変数にセットしていたのをやめています。 OpenSSL に渡した文字列バッファGC で回収された時のことを考慮していたようですが、OpenSSL が内部で文字列のコピーを作って利用しているので、保持しておく必要がなくなったためというのと、SSLContext が freeze されていた時にエラーになるのを避けるためみたいです。

nobu: r51350 2015-07-23 09:05:30 +0900

文法解析の不具合で -> {} のパースで r50402 の修正で、-> による lambda を引数に渡して、その後 do ... end のブロックを渡す記法で CMDARG_LEXPOP() を呼び忘れていて syntax error になっていたのを修正しています。 [ruby-core:70067] [Bug #11380]

nobu: r51351 2015-07-23 09:10:40 +0900

r51347 の 拡張ライブラリ openssl の ALPN サポート追加で引数の型の不一致で警告が出ていたのを明示的なキャストを追加して抑制しています。

nobu: r51352 2015-07-23 10:16:46 +0900

string.c の rb_str_shared_replace() から2つの引数が同一のオブジェクトじゃないかどうかのチェックだけを残して他の処理を str_shared_replace() という static 関数に切り出し、str_gsub() rb_str_reverse_bang() などからはこのチェックを省いた関数を直接呼び出すようにする、ちょっとした最適化をしています。

nobu: r51353 2015-07-23 10:25:49 +0900

VALUE が即値でないことをチェックしていない FL_TEST_RAW() を利用した FL_ANY_RAW(), FL_ALL_RAW() や FL_SET_RAW()/FL_UNSET_RAW()/FL_REVERSE_RAW() などの sturct RBasic::flags 操作用のマクロを追加して、OBJ_TAINTED_RAW()/OBJ_TAINT_RAW()/OBJ_INFECT_RAW() などの taint flag の関連マクロにも _RAW 版を追加しています。また STR_EMBED_P()/STR_SHARED_P() でこの _RAW 版のマクロを利用するようにしたり string.c での taint フラグの操作を _RAW 版を利用するようにしたりしています。

nobu: r51354 2015-07-23 14:14:35 +0900

string.c の rb_str_new_frozen() で文字列が struct RVALUE に embed されてなくて heap 版であることがチェック済みのところで RSTRING_PTR() マクロのかわりに直接 struct RString::as.heap.ptr をアクセスするようにしてマクロ内のチェックをスキップしたり、str_make_independent_expand() で RSTRING_PTR() の結果をローカル変数に格納して使いまわすなどの最適化

nobu: r51355 2015-07-23 14:14:53 +0900

fstr_update_callback() で fstring 管理用のテーブルを更新する時に対象の文字列がなくて新規登録する場合に、STR_FAKESTR フラグが立っていて GC で管理されていない fake string だったら str_new_static() を利用して文字列の領域をそのまま流用するオブジェクトを作るようにしています。また渡された文字列オブジェクトが共有されているものだったら str_make_independent_expand() を呼んで共有解除するようにしています。

ko1: r51356 2015-07-23 18:34:31 +0900

構造体メンバ rb_control_frame_t::pc や struct rb_iseq_constant_body::iseq_encoded に const 修飾子を追加しています。

ko1: r51357 2015-07-23 18:53:16 +0900

構造体メンバ struct rb_iseq_constant_body::local_table や、その構造体内の埋め込みの構造体 struct rb_iseq_param_keyword のメンバ table, default_values などの型に const 修飾子を追加しています。

svn: r51358 2015-07-23 18:53:28 +0900

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