ruby-trunk-changes r47217 - r47222

今日は Queue, SizedQueue の初期化されていないオブジェクトを使うと SEGV する可能性があった不具合の修正、フォーマット文字列 "%f" の Rational 対応の不具合修正、EUC-KR と UTF-8 の変換の対応文字追加などがありました。

nobu: r47217 2014-08-19 10:13:24 +0900

拡張ライブラリ thread の Queue, SizedQueue などが何らかの理由で(Queue.allocate で生成されて initialize が呼ばれてないなど)初期化されていない場合に GET_QUEUE_QUE()、GET_QUEUE_WAITERS()、GET_SZQUEUE_WAITERS() などのマクロが配列ではない値を返してしまうため SEGV する可能性があったので、get_array() という関数を導入して値チェックして初期化されていなかったら例外を発生させるように対処しています。 [ruby-core:63826] [Bug #10062]

svn: r47218 2014-08-19 10:13:36 +0900

version.h の日付更新。

nobu: r47219 2014-08-19 10:29:45 +0900

拡張ライブラリ win32ole の ole_invoke() で RHASH_SIZE() を int 型の変数に代入していたところで、オーバフローを検出するため rb_long2int() を呼ぶようにしています。

nobu: r47220 2014-08-19 13:59:44 +0900

Numeric の比較演算子で型が揃わなくてエラーにする時などの ArgumentError 例外を発生させる rb_cmperr() で例外メッセージに埋め込むクラス名を PRIsVALUE で埋め込むようにして、エンコーディングを保持したまま埋め込めるようにしています。

nobu: r47221 2014-08-19 22:22:46 +0900

U+20AC (Euro Sign) と U+00AE (Registered Sign) という2つの文字が EUC-KR から UTF-8 に変換できなかったので、変換テーブルに追加しています。 [ruby-core:64452] [Bug #10149]

nobu: r47222 2014-08-19 22:28:32 +0900

r47214 の Rational のフォーマット文字列 "%f" 指示子での精度を正確にした変更で、分母が 1 以外の時の時に正常に処理されていなかった不具合を修正しています。 [ruby-core:64454] [Bug #10151]