[#41278] [BUG:1.9] BINARY should not be ASCII-compatible — Yugui <yugui@...>

WXVndWkbJEIkRyQ5ISMbKEIKCgo+IBskQiRHISIkKiQqJGAkTSQzJDMkXiRHJE41RE9AJEclKyVQ

15 messages 2010/05/11

[#41407] [Bug #3339] win32ole test failure — Usaku NAKAMURA <redmine@...>

Bug #3339: win32ole test failure

20 messages 2010/05/25
[#41411] Re: [Bug #3339] win32ole test failure — Masaki Suketa <masaki.suketa@...> 2010/05/25

助田です。

[#41412] Re: [Bug #3339] win32ole test failure — "U.Nakamura" <usa@...> 2010/05/25

こんにちは、なかむら(う)です。

[ruby-dev:41361] Re: [ruby-cvs:35102] Ruby:r27890 (trunk): * numeric.c (rb_num2ulong): use rb_big2ulong for data from

From: Tanaka Akira <akr@...>
Date: 2010-05-19 14:28:35 UTC
List: ruby-dev #41361
2010/5/19  <naruse@ruby-lang.org>:
> naruse  2010-05-19 18:22:59 +0900 (Wed, 19 May 2010)
>
>  New Revision: 27890
>
>  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27890
>
>  Log:
>    * numeric.c (rb_num2ulong): use rb_big2ulong for data from
>      Bignum. Without this 32bit integer on 32bit environment
>      can't converted into long.
>      This fixes 1) and 2) of [ruby-dev:41289]

気になったんですが、rb_num2ulong に Float を与えたときに
  RFLOAT_VALUE(val) <= (double)LONG_MAX
が成り立たないとエラーというのは変な気がします。

LONG_MAX は signed long の最大値で、unsigned long の最大値では
ないんじゃないでしょうか。

実行して試すのはちょっと自明じゃないんですが、
Zlib.adler32_combine が NUM2ULONG を呼ぶようなので、
以下のようにすると (2**31).to_f という unsigned long の範囲内の値が
エラーになることが観測できます。

% ./ruby -rzlib -ve 'Zlib.adler32_combine((2**31).to_f,0,0)'
ruby 1.9.3dev (2010-05-19 trunk 27897) [i686-linux]
-e:1:in `adler32_combine': float 2147483648 out of range of integer (RangeError)
        from -e:1:in `<main>'

整数ならエラーにはなりません。

% ./ruby -rzlib -e 'Zlib.adler32_combine(2**31,0,0)'
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next