ruby-trunk-changes r53231 - r53237

今日は BasicSocket.for_fd の不具合修正や昨日の CGI.escape_html の拡張ライブラリ化の非互換の修正などがありました。

normal: r53231 2015-12-22 03:57:50 +0900

拡張ライブラリ socket で BasicSocket.for_fd に -1 を渡すとチェック前に rb_update_max_fd() に渡していたため [BUG] で異常終了してしまっていたので、先に is_socket() で fd チェックを実行して例外(Errno::EBADF)の発生にするようにしています。 [ruby-core:72418] [Bug #11854]

svn: r53232 2015-12-22 03:58:02 +0900

version.h の日付更新。

nobu: r53233 2015-12-22 05:40:02 +0900

r53220 で CGI.escape_html を拡張ライブラリ化した時に freeze は taint などの状態が結果の文字列に伝播しなくなっていた不具合があったので再修正しています。 https://github.com/ruby/ruby/pull/1166 [ruby-dev:49451] [Bug #11855]
RB_OBJ_INFECT() とかで…と思いましたが freeze のフラグと同時に伝播させるマクロはないんですね。というか、あれ、freeze は伝播すべきなのかな…? と思ったら次で再修正されてました。

nobu: r53234 2015-12-22 14:31:31 +0900

r53233 の CGI.escape_html の拡張ライブラリ実装での taint フラグの伝播の修正で、freeze 状態も伝播させるようにしていましたが、こっちは逆で新規に作った文字列なので伝播せずに常に freeze させないようにしています。というわけでやっぱり RB_OBJ_INFECT_RAW() を使うようになりました。 [ruby-core:72426] [Bug #11858]

nobu: r53235 2015-12-22 15:21:14 +0900

force_encoding で dummy encoding にエンコードした文字列に対して String#scrub に引数に互換性のないエンコーディングの文字列を渡して呼び出すと Encoding::CompatibilityError 例外が発生していたのを、dummy encoding には scrub は作用しないそうなので不要な例外発生はしないようにしています。

ko1: r53236 2015-12-22 20:20:12 +0900

vm_insnhelper.c の関数 vm_callee_setup_block_arg_arg0_check()、vm_callee_setup_block_arg_arg0_splat()、simple_iseq_p()、vm_callee_setup_block_arg() などをファイルの後のほうに移動しています。 こうしたほうが速くなるそうで、ううむ、そうか… [ruby-core:72200] [Bug #11829]

hsbt: r53237 2015-12-22 20:25:39 +0900

拡張ライブラリ psych の Psych::VERSION と gemspec ファイルのバージョンを 2.0.17 に更新しています。