ruby-trunk-changes r53059 - r53092

今日は主に拡張ライブラリのオブジェクトの型チェックの強化や、Refinements で method_missing の挙動を変えないようにする変更、key: value の文法の value のところに % 系のリテラルを書けるようにする修正などがありました。

naruse: r53059 2015-12-12 23:01:56 +0900

拡張ライブラリ nkf を 2.1.4 に更新しています。機能的な変更は BOM のチェック時に static 変数を再初期化しているというところで、繰り返し利用される時に前の結果が影響してしまわないようにしたという感じでしょうか。

shugo: r53060 2015-12-13 00:08:52 +0900

method_missing に Refinements が効いていたのを効かないようにする変更です。一応 2.3 からの仕様変更になりますかね? [ruby-core:72080] [Bug #11809]

svn: r53061 2015-12-13 00:09:13 +0900

version.h の日付更新。

nobu: r53062 2015-12-13 06:32:36 +0900

vm_insnhelper.c のインデントの修正のみ。

marcandre: r53063 2015-12-13 06:40:50 +0900

OpenStruct#dig で引数が Symbol もしくは to_sym で Symbol 化できないオブジェクトだった時に黙って nil を返していたのを TypeError を返すようにしています。 [ruby-core:71798] [Bug #11762]

naruse: r53064 2015-12-13 10:29:44 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLContext の "#alpn_select_cb=, #npn_select_cb= などで NUL 文字で終端を探していたのをサイズで判定するように修正しています。 OpenSSL が返す文字列は NUL 終端していないものだったそうです。 [ruby-core:72082] [Bug #11810]

duerst: r53065 2015-12-13 10:45:00 +0900

KNOWNBUGS.rb の先頭のコメントに、先頭のコメントを消すなという指示を追記しています。自己言及的だ。

knu: r53066 2015-12-13 11:43:56 +0900

標準添付ライブラリ shellwords に frozen-string-literal: true の magic comment を追加して、一部破壊的に利用する文字列オブジェクトの生成を String.new に置き換えています。

shugo: r53067 2015-12-13 11:48:34 +0900

rb_inspect で Encoding.default_internal_encoding をみて生成する文字列の encoding に反映させるようにしています。 [ruby-dev:49415] [Bug #11787]

normal: r53068 2015-12-13 12:17:28 +0900

r53066 の続きで frozen-string-literal: true にした場合に shellescape が空文字列を受け取って '' を返す時に、文字列リテラルを使っているので dup して返すようにしています。

normal: r53069 2015-12-13 12:21:12 +0900

r53068 の ChangeLog エントリを追加しています。

knu: r53070 2015-12-13 14:19:03 +0900

標準添付ライブラリ shellwords の Shellwords.shellsplit の rdoc 用コメントにクオート文字以外の shell のメタキャラクタは認識しないことを追記しています。

knu: r53071 2015-12-13 14:22:22 +0900

標準添付ライブラリ shellwords の freeze された文字列を渡した時のテストや空白の扱いのテストを追加しています。

nobu: r53072 2015-12-13 16:29:21 +0900

configure で BASERUBY が使えたら BOOTSTRAPRUBY を BASERUBY にしていたのをやめて MINIRUBY を使うようにしています。 OS X でのビルドエラーの修正みたいです。 [ruby-core:72065] [Bug #11807]
r51749 や r51789 あたりで入れた変更の revert ですね。

nobu: r53073 2015-12-13 16:41:01 +0900

そして configure で BASERUBY を full path 化するようにしています。どうも PATH にカレントパスなどが入っていてビルド時に BASERUBY がただの ruby だとビルドしたばかりでインストールしてない ruby を起動してしまってインストールに失敗することがあるみたいです。 [ruby-core:72065] [Bug #11807]

nobu: r53074 2015-12-13 18:19:20 +0900

拡張ライブラリ win32ole の String から WIN32OLE::Variant への変換で引数に渡されたオブジェクトの型のチェックが漏れているケースがあったので ole_vstr2wc() でチェックしておくようにしています。

nobu: r53075 2015-12-13 18:23:36 +0900

拡張ライブラリ tk でも引数の型チェックが漏れていたところを修正しています。

nobu: r53076 2015-12-13 18:25:15 +0900

同じく拡張ライブラリ tk で配列の要素数でループするところで毎回 RARRAY_LEN() を使ってサイズを取得するようにしています。ループ内でコールバックを呼んでいるのでそこで配列サイズが変化する可能性があるのでオーバランや不正メモリアクセスになる潜在的な可能性があったみたいです。

nobu: r53077 2015-12-13 18:26:30 +0900

拡張ライブラリ tk の Tk.hash_kv で引数の型チェックが漏れていたところがあったのを修正しています。

nobu: r53078 2015-12-13 18:27:52 +0900

拡張ライブラリ psych の Psych::Emitter#start_document で tag の配列の中身が文字列かのチェックはしてましたが、その前にエンコーディングの操作をしていたので、その前にチェックコードを移動しています。

nobu: r53079 2015-12-13 18:28:51 +0900

拡張ライブラリ psych の Psych::Emitter#start_document で tags の配列のサイズまでしかループを回さないようにしています。今度は逆に配列サイズが伸長されても追随しないようにしている、ってことですかね?

nobu: r53080 2015-12-13 18:33:40 +0900

Array#pack でここから呼ばれたなんらかの Ruby メソッドから receiver の配列がクリアされるなどしてサイズが切り詰められたら追随するように毎回 RARRAY_LEN() をチェックするようにしています。ひえー、ここほとんどの場合不要なのにちょっと悔しいですね。

nobu: r53081 2015-12-13 18:35:10 +0900

拡張ライブラリ fiddle の ext/fiddle/conversions.h で定義されているマクロ PTR2NUM() で符号付きの整数を返すようにしています。これはなんでだろ。
[追記]Fixnum として表現できる範囲を広げてできるだけ Bignum にしなくてすむようにということでした。なるほど。[/追記]

nobu: r53082 2015-12-13 18:35:58 +0900

拡張ライブラリ fiddle で Fiddle::Function.new で引数のチェックを強化しています。けどどうやら変数の宣言漏れがあってコンパイルエラーになってたようです。

nobu: r53083 2015-12-13 18:45:12 +0900

open の :encoding オプションの文字列に極端に長い文字列を渡すと SEGV する不具合を修正しています。

nobu: r53084 2015-12-13 18:48:27 +0900

r53083 の追加修正で open の :encoding の指定で BOM のチェックが UTF 以外のエンコーディングと同時に指定されていたら警告を出力するようにしています。

nobu: r53085 2015-12-13 18:49:25 +0900

error.c でコメントアウトされていた rb_enc_warn() という関数を復活させて open の :encoding オプションについての警告にオプションの文字列を埋め込む時のエンコーディングを保持するようにしています。

usa: r53086 2015-12-13 19:25:01 +0900

r53082 で漏れていた ext/fiddle/function.c の変数の宣言を追加しています。

yugui: r53087 2015-12-13 19:37:25 +0900

parse.y で PARSER_DEBUG が真に定義されている時に lex_state が更新される時に printf(3) でデバッグ出力するようにしています。 yugui さんのコミットです!!

yugui: r53088 2015-12-13 19:37:52 +0900

parse.y の lex_state_name() で r51617 で追加されていた lex_stage の名前に対応するように lex_state_name() を修正しています。また名前の配列のインデックス 0 のところに穴埋めをして名前がずれていたのを修正しています。たぶんデバッグ用の関数なので普段使われてなかったところだと思います。

hsbt: r53089 2015-12-13 19:54:30 +0900

テスト用のユーティリティとして以前は test/ruby/envutil.rb に存在していた test/lib/envutil.rb から独自の assert メソッドの定義を test/lib/test/unit/assertions.rb に移動しています。もうこれは ruby のテスト専用のライブラリですからね。

nobu: r53090 2015-12-13 19:57:51 +0900

r53082 の修正をもうひとつ。 rb_ary_subseq() に渡している変数が間違っていたのを修正して、また警告除去のために型を変更しています。

hsbt: r53091 2015-12-13 20:02:20 +0900

r53089 の ChangeLog エントリの typo 修正。

yugui: r53092 2015-12-13 20:17:18 +0900

r51617 で {key:%w[str]} のように : を使ったキーの書きかたの後に % を使ったリテラルが parse error になるようになっていたのを修正しています。 [ruby-core:72084] [Bug #11812]