From: Marc-Andre Lafortune Date: 2013-04-03T11:22:59+09:00 Subject: [ruby-core:53931] Re: [ruby-trunk - Bug #8204] ObjectSpace.each_object(Bignum) can generate Bignums that are to small to be Bignums --047d7bf0d84e52040204d96b8820 Content-Type: text/plain; charset=ISO-8859-1 Note that you can obtain whichever Bignum you want using coerce. For example: x = (1 << 100).coerce(42).first # => 42 x.class # => Bignum I saw that used in test/* I never bothered to investigate it, but I'm pretty sure this could lead to multiple bugs as MRI assumes that Bignum means big number in many places. On Tue, Apr 2, 2013 at 9:12 PM, hsbt (Hiroshi SHIBATA) < shibata.hiroshi@gmail.com> wrote: > > Issue #8204 has been updated by hsbt (Hiroshi SHIBATA). > > Category set to core > Assignee set to ko1 (Koichi Sasada) > Target version set to current: 2.1.0 > > > ---------------------------------------- > Bug #8204: ObjectSpace.each_object(Bignum) can generate Bignums that are > to small to be Bignums > https://bugs.ruby-lang.org/issues/8204#change-38132 > > Author: Hanmac (Hans Mackowiak) > Status: Open > Priority: Normal > Assignee: ko1 (Koichi Sasada) > Category: core > Target version: current: 2.1.0 > ruby -v: ruby 2.1.0dev (2013-04-02 trunk 40068) [x86_64-linux] > > > when i do: > > p ObjectSpace.each_object(Bignum).to_a > => [18446744073709551615, 3, 2394213621560389257607583714845333205] > and again: > ObjectSpace.each_object(Bignum).to_a > => [18446744073709551615, 3, 63326588221939058800767348888534802301, 0, 0, > 0] > > > my question: why does the 3 and the zeros show up? > > n = ObjectSpace.each_object(Bignum).min #=> 0 > p n.class #Bignum > p n.zero? #=> false > p n < 0 # true > > okay this means i have a zero, that looks like zero, but is not a zero and > its class is Bignum > > (but when i try in a new ruby session) > > (2**64) < 0; > p bigZero = ObjectSpace.each_object(Bignum).min #=> 0 > p bigZero.class #Bignum > p bigZero.zero? #=> true > > okay, this time i get a zero that looks like a zero, and react like a > zero, but its still a Bignum > > > so where does the zeros come from and why does they react so totaly > different? > > > -- > http://bugs.ruby-lang.org/ > > --047d7bf0d84e52040204d96b8820 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Note that you can obtain whichever Bignum you want using c= oerce. For example:

x =3D (1 << 100).coerce(42).fi= rst # =3D> 42
x.class # =3D> Bignum

I saw that used in test/*

I never bothered to inve= stigate it, but I'm pretty sure this could lead to multiple bugs as MRI= assumes that Bignum means big number in many places.


On Tue, Apr 2, 2013 at 9:12 PM, hsbt (Hi= roshi SHIBATA) <shibata.hiroshi@gmail.com> wrote:

Issue #8204 has been updated by hsbt (Hiroshi SHIBATA).

Category set to core
Assignee set to ko1 (Koichi Sasada)
Target version set to current: 2.1.0


----------------------------------------
Bug #8204: ObjectSpace.each_object(Bignum) can generate Bignums that are to= small to be Bignums
https://bugs.ruby-lang.org/issues/8204#change-38132

Author: Hanmac (Hans Mackowiak)
Status: Open
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category: core
Target version: current: 2.1.0
ruby -v: ruby 2.1.0dev (2013-04-02 = trunk 40068) [x86_64-linux]


when i do:

p ObjectSpace.each_object(Bignum).to_a
=3D> [18446744073709551615, 3, 2394213621560389257607583714845333205] and again:
ObjectSpace.each_object(Bignum).to_a
=3D> [18446744073709551615, 3, 63326588221939058800767348888534802301, 0= , 0, 0]


my question: why does the 3 and the zeros show up?

n =3D ObjectSpace.each_object(Bignum).min #=3D> 0
p n.class #Bignum
p n.zero? #=3D> false
p n < 0 # true

okay this means i have a zero, that looks like zero, but is not a zero and = its class is Bignum

(but when i try in a new ruby session)

(2**64) < 0;
p bigZero =3D ObjectSpace.each_object(Bignum).min #=3D> 0
p bigZero.class #Bignum
p bigZero.zero? #=3D> true

okay, this time i get a zero that looks like a zero, and react like a zero,= but its still a Bignum


so where does the zeros come from and why does they react so totaly differe= nt?


--
http://bugs.ruby-l= ang.org/


--047d7bf0d84e52040204d96b8820--