ruby-trunk-changes r56928 - r56948

今日はインスタンス変数を動的増やした時に同じクラスの別のインスタンスが不正メモリアクセスする可能性があった不具合の修正や openssl や psych の upstream からのマージなどがありました。

nobu: r56928 2016-11-29 21:54:43 +0900

Thread.abort_on_exception や Thread#abort_on_exception が true に設定されているときに当該 Thread で捕捉されない例外が発生して終了した時の挙動が 1.9 あたりから? 変わっていて main thread にその例外が投げられるようになっていたので、ドキュメントをそれに合わせるように修正しています。昔は abort で終了していた気がしますね。 [ruby-core:78415] [Bug #12991]

nobu: r56929 2016-11-30 00:14:05 +0900

r56906 で即値オブジェクトに dup を呼んでも TypeError を発生させないようにする変更がありましたが、Object#clone の freeze オプションに false が渡されてたら ArgumentError を発生させるように追加しています。 clone の freeze ってなんだっけな…。 r55786 で追加された clone 時に元のオブジェクトの freeze フラグを引き継ぐかどうかを指定できるようにしたキーワード引数ですね。確かに freeze しないようにって言われても即値オブジェクトは常に freeze されているものとして扱かわれるので無理ですね。 [Feature #12979]

svn: r56930 2016-11-30 00:14:06 +0900

version.h の日付更新。

usa: r56931 2016-11-30 00:23:12 +0900

r56927 でメソッド定義のかっこの前の空白が警告されるようになったのにあわせて lib/matrix.rb が修正が漏れていたので警告除去しています。

kazu: r56932 2016-11-30 00:31:16 +0900

r56912 で追加した String#casecmp? と Symbol#casecmp? メソッドについて NEWS ファイルに追記しています。 [ruby-core:77375] [Feature #12786]

nobu: r56933 2016-11-30 00:34:31 +0900

r56929 の追加修正です。 clone でキーワード引数 freeze に false を渡されてエラーにするのは Bignum や Float のオブジェクトも常に freeze されているので、即値の他にこれらも判定する special_object_p() という関数を定義してこれで判定するようにしています。 [ruby-core:78308] [Feature #12979]

rhe: r56934 2016-11-30 00:48:45 +0900

標準添付ライブラリ net/http のテストが openssl のテストのユーティリティクラスに依存していたのですが openssl は upstream があるので証明書の fixture など net/http 用に別に持つようにして依存関係を解消しています。

rhe: r56935 2016-11-30 00:48:46 +0900

標準添付ライブラリ open-uri のテストでも openssl のユーティリティに依存していたのを独自に鍵情報を持つようにしています。

rhe: r56936 2016-11-30 00:48:47 +0900

標準添付ライブラリ webrick のテストでも openssl に依存していたのをやめています。

nobu: r56937 2016-11-30 01:06:54 +0900

標準添付ライブラリやテスト、benchmark スクリプトなどでメソッド定義のかっこの前の空白が入っていて r56927 の変更で警告が出るようになったので警告除去しています。

tenderlove: r56938 2016-11-30 02:06:35 +0900

rb_ivar_count() でオブジェクトのインスタンス変数毎のテーブルの名前とインデックスの関係は同じクラスでは共有されているので、そのクラス毎のインスタンス変数の数は拡張される可能性があるのですが、オブジェクト毎のインスタンス変数の数は別に管理されているので、ROBJECT_IV_INDEX_TBL(obj)->num_entries を見てたため後から他のインスタンスインスタンス変数が追加されて拡張された場合に不正なメモリアクセスをする可能性がありました。ROBJECT_NUMIV(obj) でインスタンス毎の上限のほうを使うように修正しています。
インスタンス変数の管理方法が今のようにクラス毎にインデックスを共有するようになったのは結構前だったと思うのでおそらく 2.2, 2.3 でも修正が必要ですね。 [ruby-core:78403] [Bug #12988]

shugo: r56939 2016-11-30 10:22:05 +0900

テストで -> を使った lambda の記法でもかっことの間に空白があると警告が出るようになったので空白を削って警告除去しています。

nobu: r56940 2016-11-30 10:40:11 +0900

r56939 のように ->(x) { ... } のような記法の lambda の定義でも -> と () の間に空白があると警告が出るようになっていましたが、これは警告の対象にしないように変更されています。

duerst: r56941 2016-11-30 17:25:46 +0900

r56924 で Unicode の casemap で U+A64B という文字はうまく処理できていなかったのでテストを skip させていたのを特別処理を追加して修正しています。 [ruby-core:78410] [Bug #12990]

nobu: r56942 2016-11-30 22:09:50 +0900

parse.y で '{' と '}' という文字リテラルを使ってたところに open_brace, close_brace と const int の変数を定義して それを参照するようにしています。

nobu: r56943 2016-11-30 22:09:51 +0900

parse.y で "\uXXXX" のような記法の parse をする parser_tokadd_codepoint() で codepoint に対応する文字をバッファに追加する処理を parser_tokadd_codepoint() という関数に切り出して使いまわすようにしています。

hsbt: r56944 2016-11-30 22:55:02 +0900

拡張ライブラリ psych の 2.2.1 を upstream からマージしています。 1.8 以前のサポートのためのコードの除去などが行なわれているほか GC に関連した SEGV の修正も含まれているそうです。 https://github.com/ruby/psych/pull/296

hsbt: r56945 2016-11-30 23:24:12 +0900

拡張ライブラリ psych の gemspec ファイルで "psych/version.rb" を load するように書かれていたので require "psych" に置き換えています。

rhe: r56946 2016-11-30 23:41:46 +0900

openssl の upstream (https://github.com/ruby/openssl) で開発されていた 2.0.0 のブランチから差分がマージされています。 https://github.com/ruby/openssl/compare/v2.0.0.beta.2...v2.0.0
OpenSSL 0.9.7 以前のバージョンはサポートされなくなっています。

nobu: r56947 2016-11-30 23:43:43 +0900

文字列リテラルの \u{XXXX} の記法で X に不正な文字が含まれていた時のエラーメッセージが "unterminated Unicode escape" となっていたので "invalid Unicode escape" という例外メッセージが出るように修正しています。

nobu: r56948 2016-11-30 23:54:09 +0900

拡張ライブラリ openssl で警告除去のため return 文に明示的なキャストを追加しています。