ruby-trunk-changes r61392 - r61415

akr: r61392 2017-12-21 23:15:04 +0900

標準添付ライブラリ open-uriURI.open というクラスメソッドを定義して Kernet.open を呼び出すようにしています。これは open-uri で Kernel#openに URL を受け付けるのが、Kernel#open で "|cmd" で外部コマンドが起動されるのと同様に、意図せずネットワークアクセスしてしまうので、将来的には Kernel#open を上書きするのはやめたいみたいで、そのために今 open-uri でネットワーク越しのアクセスのために使っているところが移行できるように、まず URI.open という移行先を作っておこうということみたいです。

shugo: r61393 2017-12-22 08:28:15 +0900

Net::FTP のテストのタイムアウトを一部伸ばしています。 CI で失敗してる環境があったみたいです。 http://ci.rvm.jp/results/trunk-asserts-nopara@ruby-sky1/266962

svn: r61394 2017-12-22 08:28:16 +0900

version.h の日付更新。

nobu: r61395 2017-12-22 09:29:38 +0900

コマンドラインオプションの --dump=insns で defnied? 用の VM の defined 命令をダンプする時にオペランドの出力を詳しく出すようにしています。

nobu: r61396 2017-12-22 10:03:17 +0900

String#undump の実装で Encoding の encindex を取得する処理のために rb_enc_find_index2() という関数を追加して、ヒープに Encoding 名のためのバッファを確保せずにすむようにしています。

normal: r61397 2017-12-22 10:07:39 +0900

標準添付ライブラリ webrick の WEBrich::HTTPAuth の各種認証の実装で Kernel#open を利用しているところがあったので、意図しないコマンド実行にならないように File.open を利用するように修正しています。 [ruby-core:84391] [Misc #14216]

normal: r61398 2017-12-22 10:07:45 +0900

標準添付ライブラリ webrick の lib/webrick/httpservlet/cgi_runner.rb で STDOUT, STDERR を reopen ですりかえる時の open も Kernel#open を使っていましたが、IO#reopen はそもそも path を文字列で受け取れるので文字列のまま渡すようにしています。reopen は "|cmd" のような文字列でコマンド起動する心配はないみたいですね。 [ruby-core:84391] [Misc #14216]

normal: r61399 2017-12-22 10:07:50 +0900

標準添付ライブラリ webrickWEBrick::HTTPServlet::ERBHandler のテストを追加いています。 [ruby-core:84391] [Misc #14216]

normal: r61400 2017-12-22 10:07:55 +0900

標準添付ライブラリ webrickWEBrick::BasicLog.new でも Kernel#open を使っていたところを File.open に変更しています。 [ruby-core:84391] [Misc #14216]

normal: r61401 2017-12-22 10:08:00 +0900

標準添付ライブラリ webrickwebrick/httpservlet/xxx_handler.rb でも Kernel#open を使っていたところを File.open に変更。 [ruby-core:84391] [Misc #14216]

normal: r61402 2017-12-22 10:08:05 +0900

標準添付ライブラリ webrickWEBrick::HTTPUtils#load_mime_types のコメントで Kernel#open を使っていますが、ここはコマンド実行をあえて使っている人もいるかも…ということでそのままにしておいて、コメントだけ追記しています。 [ruby-core:84391] [Misc #14216]

nobu: r61403 2017-12-22 10:12:02 +0900

r61395 の defined 命令の disasm 時の、オペランド数が 0 の時の分岐の条件がまちがっていたので、かっこをつけて優先順位を調整しています。

nobu: r61404 2017-12-22 10:49:00 +0900

拡張ライブラリ socket の ext_socket/ifaddr.c に VALUE から rb_ifaddr_t をとりだして、さらにそこから struct ifaddrs を参照する処理が頻出していたので、get_ifaddrs() という関数に切り出すリファクタリング

kazu: r61405 2017-12-22 12:35:46 +0900

File#atime の rdoc 用コメントで不要な閉じかっこがあったのを削っています。

kazu: r61406 2017-12-22 12:35:52 +0900

File#atime の rdoc 用コメントのインデント修正。

kazu: r61407 2017-12-22 12:35:54 +0900

標準添付ライブラリ stringio の StringIO#write の rdoc 用コメントで r60377 で複数の引数を受け取れるようにしたのに追随して call-seq の表記を修正しています。

ko1: r61408 2017-12-22 14:15:45 +0900

rdoc のテストで RDoc::Markup::PreProcess.post_process のテストの assertion にメッセージ用の引数を追加しています。デバッグ用とのことで、たぶん CI でこけてるんだと思います

normal: r61409 2017-12-22 14:59:11 +0900

r61398 で webrickcgi_runner.rb で IO#reopen の引数を変更しましたが、Windows 環境では IO#reopen にファイルパスを渡すのがうまくいかないみたいで、とりあえず File.open した IO オブジェクトを渡す方法にしています。 [ruby-core:84391] [Misc #14216] [ruby-core:84398] [Bug #14420]

hsbt: r61410 2017-12-22 17:00:10 +0900

標準添付ライブラリ fileutils に FileUtils::VERSION という定数を追加して、fileutils.gemspec ファイルでこれを参照するようにしています。そしてバージョンを 1.0.2 に更新しています。

nobu: r61411 2017-12-22 17:08:31 +0900

標準添付ライブラリ erb で ERB#new_toplevel で TOPLEVEL_BINDING の複製を作るときに引数に変数名のリストを受け取って、それが指定されていたら Object#tap でブロックを作って、そこでブロックパラメーターでローカル変数の参照を遮蔽した環境を作ってそこの Binding を返すようにしています。上書きしたくない変数を指定しておくみたいな使いかたで、ERB#result_with_hash のキーと同じ変数があった時に上書きされてしまう問題を修正しているみたいです。 [ruby-core:84390] [Bug #14215]

glass: r61412 2017-12-22 17:47:39 +0900

r60284 で IO.copy_stream で Linux の新しめの system call copy_file_range() を使うようにしたのですが、これの判定が __NR_copy_file_range マクロの定義の有無で、ヘッダは新しいけど実際カーネルのバージョンが古いというような場合に、実際には使えないのに呼んでしまって Errno::ENOSYS や Errno::ENOPERM が発生するという問題があり、これの回避のために errno=EPERM で失敗した時も他の実装に fallback するようにしています。元々 ENOSYS は fallback するようになってたのですが、Docker コンテナ内で --privilege がついていない時は ENOPERM が発生するため、そのまま実行時のエラーになっていたようです。コンテナ内でビルドしているというケースなので、コンテナ内では新しいカーネル向けの distribution なのでカーネルヘッダが新しいけど、ホスト側が古いカーネルなので実際には呼べない、というのが起きていたようです。 [ruby-dev:50373] [Bug #14207]

usa: r61413 2017-12-22 17:52:11 +0900

hash.c の any_hash() で long よりも st_index_t の方がサイズ(バイト幅)が大きい時に hnum が負だと Fixnum におさまらない数になる場合があった? みたいで考慮するようにしています。関数マクロ RB_ST2FIX() でも同様の対応を追加しています。 [ruby-core:84395] [Bug #14218]

nobu: r61415 2017-12-22 21:39:32 +0900

Encoding がらみのテストで enc/unicode/data/ ディレクトリのデータファイルに依存しているところで、r60977 でファイルパスに ucd というサブディレクトリが掘られるようになったのに対応しています。