ruby-trunk-changes r39041 - r39072

今日は RubyGems の更新、Enumerator::Lazy のインタフェースの追加削除、Fixnum#**, Rational#** の不具合修正、 TracePoint#binding の不具合修正などいろいろ変更がありました。 RC2 リリース直前のラッシュでしょうか。

nobu:r39041 2013-02-04 21:09:16 +0900

io-console.gemspec のリリース日付を svn の $Date$ キーワードで自動生成するようにしています。また license を "ruby" に設定しています。

nobu:r39042 2013-02-04 21:15:32 +0900

io-console.gemspec の日付を生成するために $Date$ キーワードの展開される長さを制限するようにしています。

nobu:r39043 2013-02-04 21:23:51 +0900

io-console.gemspec のバージョンを 0.4.0 から 0.4.1 に更新しています。

zzak:r39044 2013-02-05 02:59:52 +0900

標準添付ライブラリ tracer.rb の rdoc コメントの markup を修正しています。

svn:r39045 2013-02-05 02:59:58 +0900

version.h の日付更新。

zzak:r39046 2013-02-05 04:39:15 +0900

ext/json/lib/json.rb においてコメントが JSON モジュールへの rdoc になるように require 文の位置を調整しています。

zzak:r39047 2013-02-05 05:20:23 +0900

doc/standard_library.rdoc というファイルを追加して標準添付ライブラリについて短い説明文を掲載して、同様の文章があった lib/README を削除しています。

zzak:r39048 2013-02-05 07:36:22 +0900

irb のドキュメントに auto indent 機能と auto completion 機能を on にする方法について追記しています。 [ruby-core:51209] [Bug #7642] [ruby-core:51348] [Bug #7680]
補完機能(irb/completion)は使ってましたが auto indent 機能っていうのもあったんですね、知りませんでした。

zzak:r39049 2013-02-05 08:04:09 +0900

同じく irb のドキュメントにヒストリファイル機能(履歴保存)の設定方法を追記しています。 [ruby-core:51347] [Bug #7679]

zzak:r39050 2013-02-05 09:56:11 +0900

標準添付ライブラリ racc に rdoc を追記しています。

zzak:r39051 2013-02-05 10:01:14 +0900

racc の do_parse と yyparse の定義に class_eval に文字列を渡していたのを __send__ を使った定義をするように修正しています。

nobu:r39052 2013-02-05 10:13:29 +0900

r39047 および r39050 で新規追加されたファイルの svn property 設定。

zzak:r39053 2013-02-05 10:14:52 +0900

doc/security.rdoc の英文法上の修正をしています。

zzak:r39054 2013-02-05 10:18:22 +0900

doc/security.rdoc の1行が長くなってたので80桁程度で折り返すように改行を追加しています。

drbrain:r39055 2013-02-05 11:37:35 +0900

RubyGems を 2.0.0.preview3 から 2.0.0.rc.2 に更新しています。主に gem push 時の認証情報ファイルの確認時にそのファイルのパーミッションをチェックして 0600 でなかったらエラーにして処理しないようにする変更などです。

marcandre:r39056 2013-02-05 12:49:22 +0900

Object#to_enum, enum_for の rdoc コメントに戻り値の表示やブロックを渡された時の挙動について追記しています。

marcandre:r39057 2013-02-05 12:49:41 +0900

Enumerator::Lazy.new にブロックつきで呼び出すと Enumerator.new のように yielder をブロックパラメータに渡して呼び出す、クラスを定義せずに簡易的に Enumerable っぽいオブジェクトを生成するインタフェースの rdoc を追記し、また Enumerator::Lazy#to_enum, enum_for で each のかわりに呼び出すメソッドを指定した Enumerator::Lazy を返すインタフェースを追加しています。 [ruby-core:48639] [Bug #7248]

marcandre:r39058 2013-02-05 12:49:59 +0900

Enumerator::Lazy#cycle は Enumerator#cycle の実装が self が Enumerator::Lazy の場合に Enumerator::Lazy を返すように変更されたためもう再定義する必要がなくなったということで削除されています。また chunk と slice_before は Enumerator のメソッドを super で呼び出して lazy で Enumerator::Lazy に変換するメソッドとして新たに再定義されています。これらも Enumerator のメソッドの実装で Lazy 対応してしまったらよさそうな気がしますがどうなんでしょうね。 [ruby-core:51510] [Bug #7715]

marcandre:r39059 2013-02-05 12:51:09 +0900

Range#bsearch で二分探索の中間値を計算する再に '/' 演算子メソッドではなく div メソッドを利用するようにしています。 require "mathn" した時に '/' 演算子だと Rational を返すように再定義されてしまうので、その影響を受けない div にしているようです。

nobu:r39060 2013-02-05 13:27:57 +0900

拡張ライブラリ io/console での IO#getch や IO#raw での vmin のデフォルト値を 0 から 1 に変更しています。 stty raw した時の値にそろえているそうです。

nobu:r39061 2013-02-05 13:45:23 +0900

r39059 で追加した Range#bsearch のテストで assert_separately を使ってエラー時により意味のある assertion が出るように書き直しています。

marcandre:r39062 2013-02-05 14:39:16 +0900

Fixnum#** の rdoc コメントで引数に負の整数を渡した時に Float ではなくて Rational の戻り値が返ってくることにあわせてサンプルコードの評価結果の表記を修正しています。 2 ** -1 は Rational (1/2) が返ってくるんですね。

marcandre:r39063 2013-02-05 14:39:33 +0900

Rational#** が self が 0 や 1, -1 の時に引数の値が Fixnum で表現されるのを越えた Bignum の負数の時に結果がおかしくなる不具合を修正しています。 [ruby-core:41494] [Bug #5713] [ruby-core:41498] [Bug #5715]

marcandre:r39064 2013-02-05 14:39:49 +0900

同じく Fixnum#** の時も 0 や 1, -1 の時に引数の値が Fixnum で表現されるのを越えた Bignum の負数の時に結果がおかしくなる不具合を修正しています。 [ruby-core:41494] [Bug #5713] [ruby-core:41498] [Bug #5715]

marcandre:r39065 2013-02-05 14:43:36 +0900

標準添付ライブラリ matrix.rb では同じく標準ライブラリ e2mmap を使って定義される Matrix.Raise という特異メソッドを定義して raise のかわりに使っていた部分があったのですが、不要なところまで使っていたのでそこはただの raise に変更しています。 [ruby-core:51826] [Bug #7777]

marcandre:r39066 2013-02-05 14:52:39 +0900

Enumerator.new の rdoc コメントからブロック渡しした呼び出しの時のサンプルを削除しています。 別に消さなくてもいいと思いますけど。

ko1:r39067 2013-02-05 15:04:59 +0900

TracePoint#binding で Binding オブジェクトを取得しようとする時にブロックつきメソッドから yield された時のフレーム(IFUNC フレーム)をスキップしてコピーしてしまって EP が更新されずに SEGV する不具合に対処しています。 IFUNC のフレームをスキップしないようにしています。 [ruby-dev:46908] [Bug #7774]

nobu:r39068 2013-02-05 15:24:16 +0900

vm_core.h の行末の空白除去。

nobu:r39069 2013-02-05 16:25:27 +0900

respond_to? を引数を1つしか受け付けないように再定義していた場合、内部的に rb_obj_respond_to() から呼び出す場合に警告メッセージを出力した上で第2引数を省略してメソッド名だけ渡して呼び出すようにしています。 r38118 で RubySpec がエラーになったのに対応しているそうです。 [ruby-core:51560] [Bug #7722]

drbrain:r39070 2013-02-05 16:37:16 +0900

r39055 で gem push の時に認証情報ファイルの permission チェックを追加したのですが Windows では無効なのでスキップするようにしています。

drbrain:r39071 2013-02-05 17:24:20 +0900

よくわかりませんが rdoc の Web サーバとして起動した時の検索結果に URL のパスでなくファイルパスがそのまま入っていた不具合を修正しているようです。

charliesome:r39072 2013-02-05 18:49:09 +0900

doc/security.rdoc に CSV (CSV.load には信頼できない文字列を渡してはいけないらしい)、Regexp (これは ^ と $ が行頭と行末であって文字列の先頭と末尾ではないことから validation に使う時に注意しましょうね、みたいな話)、eval (当然信頼できないソースからの文字列を渡したらいけない)、dRuby (公開されたネットワークに解放してはいけない。する時は DRb::ACL で適切にアクセス制限をすべき)などのトピックを追記しています。
CSV.load が危険というのは知りませんでした。そんなに妙なことしてるのかなって少し中身をのぞいてみてちょっとびっくりしました。 CSV.dump と対になっていて任意のオブジェクトを serialize, deserialize するようなことをするメソッドなんですね。これは確かに危険……。