ruby-trunk-changes r42596 - r42610

今日は Time の Marshal.load 時の不正なタイムゾーンを読んだ時の挙動の変更と、$SAFE = 4 の廃止に伴なう変更などがありました。

nobu:r42596 2013-08-17 22:20:50 +0900

Time の Marshal.load 時にタイムゾーンとして不正な値が読み込まれた時に ArgumentError が発生していたのを、例外を捕捉して無視させるようにしています。 [ruby-core:56648] [Bug #8795]
うーんこれは無視したほうがいいのかなぁ。おかしなデータを読んでいるのでエラーというのでもいいような。

nobu:r42597 2013-08-17 22:40:29 +0900

r42596 の ChangeLog エントリを少し書き直しています。

eregon:r42598 2013-08-17 23:20:12 +0900

r42596 のテストの環境変数 TZ のセットするユーティリティメソッドが設定する値を引数を受け取っているのに常に "UTC" をセットしていた不具合を修正。

eregon:r42599 2013-08-17 23:25:34 +0900

そして r42596 で追加した in_timezone というユーティリティメソッドがほかのテストでも使えたので流用するようにしています。

akr:r42600 2013-08-18 00:48:44 +0900

bignum.c の bigdivrem 系の関数で結果を格納する BDIGIT 配列のサイズを調整するための BIGDIVREM_EXTRA_WORDS を 1 にしています。よく理解していませんが2つの引数のサイズが同じだと 2 にしていたようなのですが、1でよかったみたいです。というかなぜ結果のバッファを割られる数のバッファより大きくしないといけないのかがよくわかってないのですが。

svn:r42601 2013-08-18 00:48:49 +0900

version.h の日付更新。

akr:r42602 2013-08-18 03:21:46 +0900

bignum.c の rb_big2str1() のリファクタリング。 bitsize() を呼ぶかわりに power_level に計算済みの値を使うようにしています。

akr:r42603 2013-08-18 10:07:50 +0900

同じく bignum.c の rb_big2str1() で power_level に BIGDIVREM_EXTRA_WORDS をかけるようにしています。この定数は 1 なので結果は変化しませんがより意味を明確にするためにとのこと。

nobu:r42604 2013-08-18 12:41:56 +0900

configure で clock_gettime(2) のチェックをする時にまず librt をリンクしてチェックするようにしています。

akr:r42605 2013-08-18 13:21:33 +0900

Process.clock_gettime の clock_id 用の定数 CLOCK_REALTIME_COARSE、CLOCK_MONOTONIC_COARSE、CLOCK_BOOTTIME の定義を追加しています。新しめ(2.6.32 とか 2.6.39)の Linux でサポートされている定数を導入しています。

akr:r42606 2013-08-18 14:26:47 +0900

r42604 の configure での clock_gettime() のチェックの変更を revert しています。よくわかりませんが、glibc の新しいバージョンで不要なのに librt をリンクしようとしてしまうからとのこと。

akr:r42607 2013-08-18 14:34:13 +0900

Process.clock_gettime の clock_id 用の定数 POSIX_TIME_CLOCK_REALTIME を ISO_C_TIME_CLOCK_REALTIME に改名しています。単に time(2) で時刻を取得する実装です。

ktsj:r42608 2013-08-18 19:36:51 +0900

各所で $SAFE = 4 が廃止されたのに対応してヘルプメッセージの $SAFE の範囲の記述や特別処理をしていたところを消す修正です。

ktsj:r42609 2013-08-18 19:36:54 +0900

さらに rdoc コメントや ext/readline/README.ja などのドキュメントでも $SAFE = 4 の廃止に伴なう修正を行なっています。

ktsj:r42610 2013-08-18 20:27:42 +0900

variable.c と vm_method.c で分岐してもブロックの中身が空の if 文を削除しています。そして、この変更では挙動は変化しないような気がするのですが Thread と Fiber のテストがこれに追随するということで変更されています。はて。
[追記]ktsj さんにおしえていただきました。if の条件のところに rb_vm_cbase() を呼び出しているところがあって、そこで例外が発生することがあったのでそれを削ったために変化したそうです。なるほど。元々なんで禁止されていたのか若干気になりますが、特に悪影響は思いつかないので多分問題ないのでしょう。[/追記]