ruby-trunk-changes r56986 - r56998

今日は hash メソッドがプロセスの起動ごとに同じ値のオブジェクトでも別の値を返すように以前の挙動に戻す変更などがありました。

kazu: r56986 2016-12-05 21:35:02 +0900

NEWS ファイルに String#each_line, String#lines にもキーワード引数 chomp を追加したことと StringIO の行指向メソッド群にもキーワード引数 chomp を追加したことを追記しています。

kazu: r56987 2016-12-05 21:35:03 +0900

ruby 本体のテスト用ユーティリティ test/lib/envutil.rb でも if のかわりに &. 演算子を利用するようにしています。

shugo: r56988 2016-12-06 08:37:25 +0900

r56985 の release_thread_shield() の修正部分にコメントを追加しています。

svn: r56989 2016-12-06 08:37:25 +0900

version.h の日付更新。

nobu: r56990 2016-12-06 12:25:21 +0900

random.c の rb_memhash() で利用する seed の初期化処理と hashseed を同じ構造体にまとめて、初期化の処理もまとめて init_seed() という関数で行なうようにリファクタリングしています。

nobu: r56991 2016-12-06 12:36:52 +0900

st.c, hash.c, numeric.c などの関数定義のスタイルの修正と不要な変数の削除などリファクタリング

nobu: r56992 2016-12-06 13:43:48 +0900

Ruby では組み込みクラスの hash メソッドはインタプリタを実行する度に同じ値のオブジェクトであっても異なる値を返すようになっていたのですが、r56650 のハッシュテーブルの実装の最適化以降同じ値のオブジェクトは同じ hash 値を返すようになっていたため、DoS 攻撃の対象になりうるのでセキュリティ上望ましくないということで修正しています。新しい実装もその点を無視していたわけではなくて、衝突が多く発生したら DoS 攻撃を検出して「強いハッシュ関数」を利用するようにテーブル毎にモードを切り替えるような実装をしていたのですが、途中で Hash に使うハッシュ値が変わるのは弊害が多いということでこの仕組みはやめて、常に強いハッシュ関数を利用するようにしています。 [ruby-core:78490] [Bug #13002]

rhe: r56993 2016-12-06 15:14:16 +0900

r56992 で追加したテストで警告除去のため明示的なかっこを追加しています。

rhe: r56994 2016-12-06 15:14:17 +0900

MatchData の initialize を呼ばれてないインスタンス(allocate で確保だけしたもの)に対して hash メソッドを呼ぶと SEGV する不具合を修正しています。

nobu: r56995 2016-12-06 15:16:57 +0900

File.symlink のテストで cygwin で Errno::EPERM が発生することがあったそうなので rescue する例外に追加しています。

nobu: r56996 2016-12-06 16:21:55 +0900

Windows 向けのファイルパスの操作でドライブレターの区切り文字の ":" を判定する処理を isADS() というマクロに切り出して NTFS 以外の時には無効にするようにしています。

nobu: r56997 2016-12-06 16:46:14 +0900

File.symlink のテストでもう一箇所 Errno::EPERM を rescue する例外に追加しています。

hsbt: r56998 2016-12-06 20:57:19 +0900

gems/bundled_gems の rake を 12.0.0 に、minitest を 5.10.1 に更新しています。