From: matz@... (Yukihiro Matsumoto) Date: 2001-04-17T15:12:28+09:00 Subject: [ruby-dev:12981] Re: rb_big2long まつもと ゆきひろです In message "[ruby-dev:12980] rb_big2long" on 01/04/17, "K.Kosako" writes: |rb_big2long()の範囲チェックが、 |2の31乗のときだけ漏れています。 | |x = 2**31 |p x # => 2147483648 | |$SAFE = x |# => bn.rb:5: tried to downgrade safe level from 0 to -2147483648 (SecurityError) 確かに。でも |- if ((long)num < 0 && (long)num != LONG_MIN) { |+ if ((long)num < 0) { だと -(2**31) は表現できるのにハネちゃうので、 + if ((long)num < 0 && (RBIGNUM(x)->sign || (long)num != LONG_MIN)) { が良いのではないでしょうか?