ruby-trunk-changes r59351 - r59362

今日は Hash リテラルでキーの文字列を fstring 化する最適化や Enumerable#map のブロック引数に lambda を渡した時の不具合修正などがありました。

normal: r59351 2017-07-18 10:59:28 +0900

r59281 の WEBrick での SNI 対応の追加で WEBrick::GenericServer#ssl_context を修正して正しい OpenSSL::SSL::SSLContext を返すようにしています。 [ruby-dev:50173] [Feature #13729]

svn: r59352 2017-07-18 10:59:29 +0900

version.h の日付更新。

normal: r59353 2017-07-18 11:10:50 +0900

doc/extension.rdoc に CRuby の Thread の実装と GVL/IO-blocking についてのドキュメントを追記しています。 [ruby-core:82016] [Feature #13740]

normal: r59354 2017-07-18 11:29:59 +0900

r59304 や r59310 でやっていた Hash#[]= でキーが String オブジェクトだった時に dedup して fstring を使うようにする変更の再修正。taint された文字列の場合を考慮して、別途 rb_vm_t::tainted_frozen_strings というテーブルを追加して、fstring が既に存在するかどうかの判定をする関数を rb_fstring_existing() として string.c に追加してこれを利用するようにしています。 [ruby-core:82012] [Bug #13737]

normal: r59355 2017-07-18 13:30:08 +0900

r59354 からさらに続けて newhash 命令で新規 Hash オブジェクトを生成する時(Hash リテラルなど)にもキーが String オブジェクトだったら fstring を利用しようとするようにしています。

normal: r59356 2017-07-18 16:21:05 +0900

tainted fstring の対応で String#-@ に何か問題があるらしくてそれを炙り出すためのテストを追加しています。 [ruby-core:82092]

nobu: r59357 2017-07-18 16:48:37 +0900

rb_block_min_max_arity() を rb_vm_block_min_max_arity() に改名して rb_block_min_max_arity() はそれに block_setup() を追加した extern 関数として定義しなおしています。

nobu: r59358 2017-07-18 17:31:02 +0900

r59357 で extern 関数にした rb_block_min_max_arity() を利用して Enumerable#collect, #map でブロック引数として lambda 型の Proc オブジェクトを受け取った時の引数の展開を行うように修正しています。 [ruby-dev:50063] [Bug #13391]

normal: r59359 2017-07-18 18:52:55 +0900

r59354 の追加修正。 String#-@ で fstring 化する時に tainted フラグを考慮するように、というか rb_fstring() 自体 tainted フラグをチェックして tainted_frozen_strings テーブルに追加するように修正しています。

nobu: r59360 2017-07-18 19:29:19 +0900

test/ruby/test_string.rb の String#-@ のテストで assert_same や assert_not_same などの同一正チェックをする assertion を利用するようにリファクタリングしています。

nobu: r59361 2017-07-18 19:49:10 +0900

r59360 でまちがえて assert_not_send にしてしまっていたところがあったので修正。

hsbt: r59362 2017-07-18 20:28:49 +0900

拡張ライブラリ digest の ext/digest/digest_conf.rb で OpenSSL や LibreSSL のライブラリを探索するのに様々な名前に対応できるように find_openssl_library というメソッドを追加して細かいロジックを実装しています。 openssl の extconf.rb から判定ロジックを持ってきたそうです。