From: TOYOFUKU Chikanobu Date: 2008-09-03T16:49:30+09:00 Subject: [ruby-dev:36119] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects 豊福です。 In [ruby-dev:36118] > ごめんなさい、質問の意味がよくわかりません。zeroであって長さ > が2以上になることがあるのかという意味なら、「ない は ず」と答 > えます。 [ruby-dev:36081] にも書きましたが In [ruby-dev:33909] > RBIGNUM(x)->lenが2以上だけど数としては0というBignumオブジェクトが存在す > る以上、このパッチは当てないとおかしいとおもいます。 とその「このパッチ」の In [ruby-dev:33892] -#define BIGZEROP(x) (RBIGNUM_LEN(x) == 0 || (RBIGNUM_LEN(x) == 1 && BDIGITS(x)[0] == 0)) +#define BIGZEROP(x) (RBIGNUM_LEN(x) == 0 || \ + (BDIGITS(x)[0] == 0 && \ + (RBIGNUM_LEN(x) == 1 || bigzero_p(x)))) + +static int +bigzero_p(VALUE x) +{ + long i; + for (i = 0; i < RBIGNUM_LEN(x); ++i) { + if (BDIGITS(x)[i]) return 0; + } + return 1; +} です。 ---