ruby-trunk-changes r31007 - r31017

去年の 10/30 毎に入ってた REXML のエンコーディング情報の使用変更が元に戻されています。そのほか小さな不具合修正がいくつかありました。

nobu:r31007 2011-03-02 23:20:06 +0900

String#byteslice の第2引数に負の数を渡した時に空文字列じゃなくて nil が返るようにしています。あと RSTRING_LEN(str) を一度読んで値を使い回すなどちょっと最適化など。

naruse:r31008 2011-03-03 00:36:48 +0900

REXML::Encoding が保持するエンコーディング情報を Encoding::UTF_8 のような ruby の Encoding オブジェクトではなくて、それを示す文字列に戻しています(r29646 の前に)。
その理由については [ruby-dev:42510] からのスレッド(チケットは [Bug #3990])での議論が詳しいと思います。
わたしはこれを読んで「互換性を壊さないため」「REXML::Encoding が表すものは XML の属性としてのエンコーディング情報で Ruby の Encoding とはまた別のものなので、XML の仕様の表現に倣うべき」という理由だと読み取りましたが、長くてこみ入った議論なので興味のある方はチケットの議論を参照してください。

svn:r31009 2011-03-03 00:51:53 +0900

version.h の日付更新。

naruse:r31010 2011-03-03 01:14:32 +0900

addr2line.c でデバッグ情報レコードから多倍長整数をデコードする再に shift 前に型キャストが抜けていてオーバフローの危険があったのを修正。また実行体ファイルの lseek に失敗した時のエラー処理が抜けていたのを修正。

naruse:r31011 2011-03-03 14:28:00 +0900

Time#strftime で %F 指定子に大きな幅を指定すると SEGV する不具合を修正しています。大きすぎる幅を指定したら無視しています。その場合は Time#strftime が "" を返すようです。 [ruby-dev:43284] [Bug #4456]

naruse:r31014 2011-03-03 17:53:44 +0900

r31008 で revert した REXML の変更内容を NEWS からも削除しています。

naruse:r31015 2011-03-03 18:59:51 +0900

String#slice! で freeze した文字列を変更しようとしたら常に例外が発生するように str_modify_keep_cr() の呼び出しは結果が nil かどうかのチェック前に行なうよう r31004 の一部を戻しています。

usa:r31016 2011-03-03 21:23:44 +0900

test_process.rb で Process.spawn でファイルディスクリプタ番号を指定して redirect する機能を使っているものがありましたが、Windows 版ではサポートされないのでそういう指定は取り除くようにしています。並列テストが Windows で動かなかった理由の一つが対策されたようですね。

usa:r31017 2011-03-03 22:13:10 +0900

そして Windows 版では Process.spawn で 3以上のファイルディスクリプタ(つまり標準入力、標準出力、標準エラー出力以外)を redirect する指定に ArgumentError 例外を発生させるようにしているようです。