ruby-trunk-changes r42898 - r42905

今日は RubyGems 2.1.0 のマージがありました。脆弱性修正とのことなので trunk を使ってない人も RubyGems のリリースノート等をご確認ください。
また Refinements と Module#instance_methods の組合せでの不具合修正、Kernel#caller の引数の扱いの不具合修正などがありました。

drbrain:r42898 2013-09-10 09:52:14 +0900

RubyGems 2.1.0 をマージしています。 RubyGems 2.1.0 は gemspec のバージョンの解析のための正規表現のバックトラックを突いて、チェックに時間のかかるバージョン文字列を作れるという DoS ができるという脆弱性の修正を含んでいるそうです。 http://rubygems.rubyforge.org/rubygems-update/CVE-2013-4287_txt.html
Bundler で git リポジトリから直接 gem パッケージを作ってインストールするようにしていると、gemspec ファイルを書き換えられる可能性があるので、そういうことをしている場合はアップデートしておいたほうがよさそうです。 また依存関係解決のコードを Bundler と同様のものに変更するなどの変更があるそうです。
リリースノートはこちら。 http://rubygems.rubyforge.org/rubygems-update/History_txt.html#label-2.1.0+%2F+2013-09-09

svn:r42899 2013-09-10 09:52:21 +0900

version.h の日付更新。

kazu:r42900 2013-09-10 10:09:55 +0900

NEWS ファイルの RubyGems の項目の RubyGems のバージョンを 2.1.0 に更新しています。

kazu:r42901 2013-09-10 12:06:14 +0900

IO#write の rdoc のサンプルコードのかっこの抜けを修正しています。

nobu:r42902 2013-09-10 12:39:28 +0900

vm_method.c の rb_resolve_refined_method() と get_original_method_entry() の引数 rb_method_entry_t *me に const 修飾子を付加しています。

nobu:r42903 2013-09-10 12:39:31 +0900

Refinements で Module#refine のブロック内で Module/Class にメソッドを追加すると、その Module/Class の instance_methods に追加したメソッドが using していなくても含まれてしまうという不具合があり、Refinements 用のメソッドエントリは実際に呼べるか(using の影響下にあるか)確認するようにして修正しています。 [ruby-core:57080] [Bug #8881]

nobu:r42904 2013-09-10 14:05:50 +0900

rational.c と complex.c で CANON マクロが定義されていない時、つまり CANONICALIZATION_FOR_MATHN が定義されていない時に未定義の変数 canonicalization を参照してしまっていたところがあったので、 #ifdef #endif でくくっています。またおそらく漏れがないようにだと思いますが、未定義の時はマクロで <<>> と定義するようにしています。うっかり参照していたらコンパイルエラーになってすぐに気が付けるようにしているのだと思います。

sorah:r42905 2013-09-10 14:37:39 +0900

Kernel#caller の第2引数に明示的に nil を渡した時に TypeError が発生していたので省略されたのと同じものとして扱うように修正しています。 [ruby-core:57094] [Bug #8884]
この手のコード結構ありそうだなーと思いましたが大抵省略可能な引数などは rb_scan_args() で処理するのであまり見当らないのでした。