Hatena::ブログ(Diary)

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

2016-12-06 ruby-trunk-changes r56986 - r56998

[][]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 に更新しています。

2016-12-05 ruby-trunk-changes r56982 - r56985

[][]ruby-trunk-changes r56982 - r56985

今日は Array#shuffle などの random に渡したオブジェクトrand の呼び出しについてのチェック強化と複数 Thread からの require の lock の不具合修正などがありました。

naruse: r56982 2016-12-05 08:14:46 +0900

複数の Thread から同時に require した時のテストでタイムアウトすることがあったので assert_in_out_err の timeout を 20 にのばしています。

svn: r56983 2016-12-05 08:14:47 +0900

version.h の日付更新。

nobu: r56984 2016-12-05 09:03:45 +0900

random.c の rb_random_ulong_limited() で乱数オブジェクトの obj の rand メソッドを呼び出す時に Kernel#rand メソッドが存在するため意図しないオブジェクトを渡しても呼べてしまっていたので rb_funcallv_public() で public method に限定してメソッド呼び出しするようにして Kernel#rand を使ってしまうのを防いでいます。 [ruby-dev:49892] [Misc #13003]

shugo: r56985 2016-12-05 20:10:05 +0900

r56982 で timeout をのばしてみた複数 Thread での同じファイルの require のテストですが、どうやら load lock にデッドロックする可能性が残ってたみたいで、load_lock() で他の Thread でロードが完了して thread_shield が削除された瞬間に不要な loading_tbl への thread_shield の追加をする可能性があったのを追加しないようにしています。 [ruby-core:78464] [Bug #12999]

load lock はいつ読んでも「これでバッチリだ」と言い切れる気がしないですね…

2016-12-04 ruby-trunk-changes r56972 - r56981

[][]ruby-trunk-changes r56972 - r56981

今日は Unicode の casemap の特別な文字の扱いの実装方法の変更や rb_get_kwargs() の不正キーワード引数のチェックの不具合修正などがありました。

nobu: r56972 2016-12-03 23:18:03 +0900

String#each_line にも gets や readlines と同様にキーワード引数 chomp を追加して改行コードを削って渡すようにしています。

shugo: r56973 2016-12-04 00:41:14 +0900

Net::FTP のテストで IPv6 対応をしています。 Windows でのテストの高速化のためだそうです。

svn: r56974 2016-12-04 00:41:15 +0900

version.h の日付更新。

duerst: r56975 2016-12-04 10:17:34 +0900

enc/unicode/case-folding.rb で CaseUnfold_11 のテーブルの生成で U+03B9/U+03BC/U+A64B の3つの文字は大文字が先に来るように順序をいれかえるようにしています。r56941 で enc/unicode.c に入れてた特別処理をこちらで吸収したみたいですね。 [ruby-core:78410] [Bug #12990]

duerst: r56976 2016-12-04 10:58:54 +0900

r56975 で enc/unicode/case-folding.rb で U+03B9/U+03BC/U+A64B のための casemap の特殊処理を入れたので 56941 での enc/unicode.c での特別扱いは削除しています。 [ruby-core:78410] [Bug #12990]

shugo: r56977 2016-12-04 13:53:33 +0900

r56973 の Net::FTP のテストの IPv6 対応で Addrinfo.getaddrinfo が失敗した時にはアドレスを "127.0.0.1" に fallback するようにしています。

shugo: r56978 2016-12-04 14:05:54 +0900

r56977 の追加修正。 Addrinfo.getaddrinfo に socket type (STREAM) を指定するようにして、また fallback のために rescue する例外を SocketError に指定しています。

ktsj: r56979 2016-12-04 14:40:18 +0900

r56593 で TracePoint に callee_id を追加した時に rb_frame_method_id_and_class() の引数を追加していましたが C API の互換性が失なわれていたのでこの部分は revert しています。 [ruby-core:78471] [Feature #12747]

nobu: r56980 2016-12-04 17:50:28 +0900

doc/extension.rdoc および doc/extension.ja.rdoc の rb_get_kwargs() についての説明が不正確になっていたので修正しています。 [ruby-dev:49893] [Bug #13004]

nobu: r56981 2016-12-04 17:50:29 +0900

rb_get_kwargs() で values に NULL でないポインタが渡されて呼び出された場合に不正なキーワード引数によるエラーが発生しない不具合を修正しています。 [ruby-dev:49893] [Bug #13004]

2016-12-03 ruby-trunk-changes r56966 - r56971

[][]ruby-trunk-changes r56966 - r56971

今日は StringIO の gets などの行指向メソッドでも chomp キーワード引数を追加して改行コードを削って返せるようにする変更などがありました。

duerst: r56966 2016-12-03 14:09:09 +0900

test/ruby/enc/test_case_comprehensive.rb のテストクラスの名称を TestComprehensiveCaseFold から TestComprehensiveCaseMapping に改名しています。

svn: r56967 2016-12-03 14:09:10 +0900

version.h の日付更新。

duerst: r56968 2016-12-03 16:18:41 +0900

test/ruby/enc/test_case_mapping.rb に Unicode の casemap を考慮した正規表現の大文字小文字を無視したマッチの動作を確認するテストを追加しています。 [ruby-core:78410] [Bug #12990]

nobu: r56969 2016-12-03 20:01:24 +0900

拡張ライブラリ stringio のテストに StringIO#gets および StringIO#each に "" を渡して paragraph mode で読み込む時のテストを追加しています。

nobu: r56970 2016-12-03 20:01:25 +0900

r56581 で IO#gets などに追加したのと同様に拡張ライブラリ stringio の StringIO#gets などにも chomp オプションを追加して、改行コードを取り除いて返すモードを追加しています。

kazu: r56971 2016-12-03 20:18:44 +0900

hash.c の rb_define_method() の実引数に空白を追加して整形しています。 https://github.com/ruby/ruby/pull/1492 [ruby-core:78297] [Misc #12977]

2016-12-02 ruby-trunk-changes r56957 - r56965

[][]ruby-trunk-changes r56957 - r56965

今日は Array#pack のキーワード引数 buffer の追加や String#unpack1 という unpack の1要素版のメソッドの追加など新機能の追加がありました。

usa: r56957 2016-12-01 22:08:20 +0900

Array#pack にキーワード引数 buffer と offset を追加して、pack で値をエンコードする文字列を buffer で渡した文字列オブジェクトの offset の位置から書き込むように指示することができるようにしています。おーなるほど、バイナリエンコーディングが効率的になりそう。 [ruby-dev:49798] [Feature #12754]

usa: r56958 2016-12-01 22:20:47 +0900

r56957 で追加した Array#pack のキーワード引数の offset ですが、pack のフォーマット文字列の指示子に "@" というのがあって書き込む位置を指定できる(知らなかった…)ので offset は削ってます。

naruse: r56959 2016-12-01 23:18:32 +0900

String#unpack1 というメソッドを追加しています。 これは unpack.first と同じで、要するに unpack は配列を返すけど1つの要素だけデコードする時には配列を作るの無駄だよね、ということですね。これも非常に便利ですね。 [ruby-core:77249] [Feature #12752]

naruse: r56960 2016-12-02 02:43:41 +0900

r56959 で未使用になった pack.c のローカル変数を除去。

svn: r56961 2016-12-02 02:43:42 +0900

version.h の日付更新。

rhe: r56962 2016-12-02 11:24:45 +0900

MatchData#hash の実装で利用された Regexp の hash 値利用されていなかった不具合を修正しています。

nobu: r56963 2016-12-02 11:47:11 +0900

\u{XXXX} の表記で内部の空白を許容するように制限を緩めています。

nobu: r56964 2016-12-02 12:33:54 +0900

\u{XXXX} の記法の parse の処理で不正な codepoint のチェックを parser_tokadd_utf8() から parser_tokadd_codepoint() へ移動して1箇所にまとまるようにしています。

nobu: r56965 2016-12-02 15:12:56 +0900

String#chop や chomp のテストで特殊変数 $/ を変更しているテストメソッドで、例外発生などで抜ける時も $/ を元に戻すように ensure 節を追加しています。