From: "U.Nakamura" Date: 2010-06-28T09:52:36+09:00 Subject: [ruby-dev:41753] Re: [Bug #3490][Assigned] test_pack_utf8 failure on mswin64 こんにちは、なかむら(う)です。 In message "[ruby-dev:41752] [Bug #3490][Assigned] test_pack_utf8 failure on mswin64" on Jun.28,2010 05:15:28, wrote: > 受理されるべきでない値が受理されるのでバグですが、受理されるべき > 値が受理されないわけではないので、致命的ではないと判断し優先度を > Low にします。 > 個人的には 1.9.2 では WONTFIX が望ましいと思いますが、usa さんの > 意見はどうでしょうか。 今のタイミングだと怖すぎるので、私も1.9.2はいじらない方がいい ような気がします。 > SIGNED_VALUE rb_big2long(VALUE x) > > あたりが、sizeof(VALUE) == sizeof(long) を期待している気がする > ので、以下のようなパッチで直るんじゃないかと思いました。 えーと、num != LONG_MINがあるうちはダメじゃないですかね。 というわけで末尾のパッチのような感じじゃないといけないんじゃ ないかと思います(未確認)。 > ただ、直ったとしてもこのパッチには他の環境での影響が怖いのと、 > 他にも直すべき場所がありそう (rb_big2ulong とか) なので、検討が > 必要だと思います。 同意します。 r10511で変更されたところは要チェックかなあ。 Index: bignum.c =================================================================== --- bignum.c (revision 28430) +++ bignum.c (working copy) @@ -1189,8 +1189,9 @@ rb_big2long(VALUE x) { VALUE num = big2ulong(x, "long", TRUE); - if ((SIGNED_VALUE)num < 0 && - (RBIGNUM_SIGN(x) || (SIGNED_VALUE)num != LONG_MIN)) { + if (((SIGNED_VALUE)num > 0 && num > (SIGNED_VALUE)LONG_MAX) || + ((SIGNED_VALUE)num < 0 && + (RBIGNUM_SIGN(x) || (SIGNED_VALUE)num < (SIGNED_VALUE)LONG_MIN))) { rb_raise(rb_eRangeError, "bignum too big to convert into `long'"); } if (!RBIGNUM_SIGN(x)) return -(SIGNED_VALUE)num; それでは。 -- U.Nakamura