ruby-trunk-changes r30781 - r30801

本日はたくさんコミットがありました。いくつかの拡張ライブラリで initialize を再定義してしまったりした時に未初期化の構造体を触ってしまう不具合が修正されています。

kosaki:r30781 2011-02-05 01:05:40 +0900

Thread.kill に Thread オブジェクト以外のものを渡すと SEGV するという不具合を修正するために、VALUE から rb_thread_t を取り出すために CoreDataFromValue() マクロでなく TypedDataGetStruct() を利用するように変更しています。これは T_DATA タイプのオブジェクトの型チェックつきで取り出すので Thread 以外のオブジェクトを渡すと例外を発生させてくれます。[ruby-core:35086] [Bug #4367]

svn:r30782 2011-02-05 01:05:41 +0900

version.h の日付更新。

nobu:r30783 2011-02-05 02:08:44 +0900

r30781 で TypedData_Get_Struct() で利用するために thread_data_type 変数を公開シンボルにしたので、ruby_ という接頭語を付けています。

nobu:r30784 2011-02-05 02:09:45 +0900

SCRIPT_LINES__ という定数に Hash を代入した時に蓄積されるソースコードの文字列のエンコーディングにマジックコメントを反映させています。[ruby-dev:43168] [Bug# 4361]

nobu:r30785 2011-02-05 03:34:12 +0900

FileUtils のテスト用ユーティリティクラスの assert_block メソッドを再定義してエラー時にメッセージを表示するようにしているらしいです。というか MiniTest::Assertions#assert_block がメッセージを受け取ってるのに表示していないのでここで当座の対応という感じでしょうか。

nobu:r30786 2011-02-05 03:35:07 +0900

FileUtils のテストでエラー時のメッセージに情報を追加しています。

nobu:r30787 2011-02-05 03:37:52 +0900

FileUtils::DryRun のメソッドが実際には dryrun じゃなくて実際に操作してしまうのを変更。[Bug #4331] [ruby-dev:43129]

nobu:r30788 2011-02-05 09:38:15 +0900

transcode.c 内で文字列のエンコーディング変換+コピー処理を内部関数 encoded_dup() に切り出すリファクタリング

nobu:r30789 2011-02-05 10:09:39 +0900

load.c の rb_get_expanded_load_path() の先頭で相対パスが含まれているかチェックしているけどやめて常に rb_file_expand_path() を通すようにしています。

nobu:r30790 2011-02-05 10:13:41 +0900

ext/json/parser/parser.rl にコメントの追加と、正規表現内のダブルクオート文字のエスケープが追加されています。json のパーサは ragel というステートマシンコンパイラで生成されているようですね。コメントは emacs の為のものだそうです。

nobu:r30791 2011-02-05 10:30:01 +0900

JSON::Parser#initialize を再定義してしまうと JSON::Parser#source などで未初期化のため SEGV してしまう不具合を修正。初期化済みでなかったら初期化するようにしているみたいです。[ruby-core:35079]

nobu:r30792 2011-02-05 11:29:18 +0900

JSON::Parser を2重に初期化するときに発生する例外は ArgumentError から TypeError へ変更。

nobu:r30793 2011-02-05 11:48:55 +0900

OpenSSL::Cipher にも同様に initialize を再定義して潰してしまうと未初期化のまま利用して SEGV してしまう不具合があったので必要に応じて初期化するようにしています。

nobu:r30794 2011-02-05 12:05:35 +0900

YAML::Syck::Node#initialize_copy メソッドが削除されています。ML リンクからしてこれも同様に拡張ライブラリが未初期化のデータを使用してしまう問題の対応みたいなのですが、これがどう関係するのかちょっとわかりませんでした。
[追記]コメントで教えていただいとところによると pointer を含む構造体を memcpy() で shallow-copy していたので解放が2重に行なわれてしまっていたそうです。[/追記]

drbrain:r30795 2011-02-05 15:20:57 +0900

RDoc 3.5.2 がマージされています。量が多いので詳しい内容はパス。リリースノートはこちら。 http://docs.seattlerb.org/rdoc/History_txt.html
NEWS ファイルに記載されているリリースノートの URL が変更されていますね。

kosaki:r30796 2011-02-05 16:50:12 +0900

Test::Unit::Assertions#assert が引数に nil を渡された時にエラーにしているのをやめています。[Bug #4371] [ruby-dev:43174]
changes を始めてからこの箇所の変更を見た記憶があるんですが、わざと nil を渡したのを区別しているんですよね確か。

nobu:r30797 2011-02-05 20:40:43 +0900

r30786 で定義した assert_block だと引数が渡されていない時に assert に nil を渡してしまっていたので、assert_block に渡された引数をそのまま assert に横流しするようにしています。[Bug #4371] [ruby-dev:43174]

nobu:r30798 2011-02-05 21:22:27 +0900

assert_block の定義を FileUtils のテスト用ユーティリティでの再定義から lib/test/unit/assertions.rb に移動しています。

nobu:r30799 2011-02-05 21:47:16 +0900

Ripper が多重代入のパースに失敗していたのを修正。[ruby-core:35078]

kosaki:r30800 2011-02-05 22:06:14 +0900

r30796 を revert しています。

naruse:r30801 2011-02-05 22:48:45 +0900

r30789 で追加したテストで生成するスクリプトで警告メッセージを誘発する未使用の定数参照があったので解消しています。