ruby-trunk-changes r35996 - r36017

openssl の機能追加と exec/fork まわりのリファクタリング、スタックサイズの計算の処理の修正などがありました。

emboss:r35996 2012-06-10 03:16:18 +0900

拡張ライブラリ openssl の暗号化(OpenSSL::Cipher)の rdoc のサンプルコードのバグ修正と記述の追加をしています。 [ruby-core:45154] [Bug #6475]

emboss:r35997 2012-06-10 06:24:40 +0900

NEWS ファイルに openssl の追加機能として TLS v1.1 と v1.2 のサポートと client renegotiation の機能追加と OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS による BEAST attack 対策(これはよくわかりませんでした。どこコミットのことだろう)を追記しています。
[追記]znz さんに教えていただいたところでは [Bug #5353]r34482 あたりじゃないかとのことでした。情報提供ありがとうございました! [/追記]

nobu:r35998 2012-06-10 06:36:05 +0900

いくつかのファイルの末尾の空白を除去。

akr:r35999 2012-06-10 06:48:42 +0900

process.c の after_exec() も async-signal-safe な部分とそうでない部分を分離して after_exec_async_signal_safe() と after_exec_non_async_signal_safe() という関数にしています。

akr:r36000 2012-06-10 10:17:53 +0900

process.c の rb_f_exec() でパラメータの準備する処理に rb_exec_arg_prepare() と同じ内容があったのでこれを再利用するようにリファクタリングしています。

emboss:r36001 2012-06-10 10:23:21 +0900

拡張ライブラリ openssl の OpenSSL::PKey#export というメソッド(これまで to_pem というメソッドだったものと実装は同じ)を定義しています。また export で鍵を取り出す時に指定するパスワードに 4文字以上でないと例外が発生するようしています。 この制限は OpenSSL 自体の制限だそうです。 [ruby-core:42281] [Bug #5951]

akr:r36002 2012-06-10 10:29:58 +0900

rb_exec_async_signal_safe() を static でなく公開して、internal.h に宣言を記述して拡張ライブラリ pty から rb_exec_async_signal_safe() や rb_fork_async_signal_safe() を利用するように実装を変更しています。

emboss:r36003 2012-06-10 10:31:06 +0900

NEWS ファイルに OpenSSL::PKey#export のパスワードの長さ制限について追記ています。

akr:r36004 2012-06-10 10:46:45 +0900

process.c の async-signal-safe 状況のコメントを更新しています。

emboss:r36005 2012-06-10 10:53:20 +0900

拡張ライブラリ OpenSSL でセッションIDを生成するために OpenSSL::Digest::MD5 を利用していたところ FFIPS 140-2 認定版のライブラリを利用していると MD5 が利用できなくてエラーになっていたので Random を使って生成するようにしています。 [ruby-core:43266] [Bug #6137]

emboss:r36006 2012-06-10 11:38:40 +0900

どういう機能かよく調べていませんが、拡張ライブラリ openssl で OpenSSL の EC_POINT_mul() という関数を OpenSSL::PKey::EC#mul として呼べるようにメソッドを追加しています。 [ruby-core:44408][Feature #6310]

akr:r36007 2012-06-10 11:45:38 +0900

proces.c の rb_fork_internal() で引数の chfunc_is_async_signal_safe の指定が偽の時だけ after_fork() を呼ぶようにしています。

akr:r36008 2012-06-10 12:16:32 +0900

popen や open("|cmd") のようにコマンドを渡した時の実装では rb_exec_err() や rb_fork_err() を呼ばないで rb_exec_async_signal_safe() や rb_fork_async_signal_safe() の async-signal-safe 版を呼ぶようにしています。

akr:r36009 2012-06-10 12:46:09 +0900

rb_f_exec() で Mac OS X 以外では rb_exec_err() のかわりに rb_exec_async_signal_safe() を呼ぶようにしています。 コメントによると Leopard 以前の Mac OS X だとプロセスに複数のスレッドがいる状態で fork(2) を呼ぶと ENOTSUPP が帰ってくるので fork 前に他のスレッドを全て止めないといけないためだそうです。

naruse:r36010 2012-06-10 14:28:51 +0900

NetBSD 6 adm64 版で libexecinfo が利用可能になったので configure.in でこの環境では execinfo() と backtrace() の存在チェックをするようにしています。 execinfo() は ruby がSEGVなどして強制終了する時にバックトレースを出力するために利用しているものです。

nobu:r36011 2012-06-10 15:49:16 +0900

RubyVM::InstructionSequence#disasm でのエンコーディングの扱いをチェックしているテストで、一時的に default_internal をソースコード文字列のエンコーディングに置き換えるようにしています。

akr:r36012 2012-06-10 15:51:05 +0900

process.c の retry_fork() で親プロセスは after_fork() を呼ばないといけないのに fork() がエラーを返した時に呼んでいなかったのを修正しています。また rb_fork_internal() では子プロセスの時のみ after_fork() を呼ぶように条件を変更しています。

nobu:r36013 2012-06-10 17:54:28 +0900

pthread 版の Thread のスタックサイズの計算で get_stack() が利用できる場合にマシンスタックの本当の始点と CRuby のプロセス内で認識しているスタックの底の差のぶんをスタックサイズから差し引くようにしています。

nobu:r36014 2012-06-10 17:54:32 +0900

pthread 版の Thread 実装でマシンスタックの情報を取得する関数 get_stack() の条件コンパイルの分岐を修正しています。 pthread_get_stackaddr_np() と pthread_get_stacksize_np() が利用できる環境を Mac OS X として、この時 pthread_attr_init() が呼ばれなくなっています。

nobu:r36015 2012-06-10 17:54:38 +0900

gc.h にマシンスタックが伸びる方向(アドレスの増える方向に伸びるのか減る方向に伸びるのか)を判定するマクロ IS_STACK_DIR_UPPER() を追加してこれを thread_pthread.c で使うようにしています。

yugui:r36016 2012-06-10 18:39:17 +0900

NaCl 対応向けに、環境変数 PATH に NativeClient SDK の toolchain へのパスが含まれていなかったら警告を発生させて PATH に追加するようにしています。もともと PATH への追加はしていましたが、Makefile 内での PATH の変更が GNU make 3.81 では効かなかったそうです。

knu:r36017 2012-06-10 18:59:59 +0900

Net::HTTP の rdoc のステータスコードの記述が重複していたものを削除して、追加されたステータスコードは元となる RFC の番号を記述するようにしています。