From: Tietew Date: 2007-08-14T12:02:09+09:00 Subject: [ruby-dev:31405] Re: negative allocation size in rb_f_sprintf On Tue, 14 Aug 2007 11:29:56 +0900 In article <20070814103843.501B.TIETEW+RUBY-DEV@tietew.net> [[ruby-dev:31404] negative allocation size in rb_f_sprintf] Tietew wrote: > どこかで len=-1 な Bignum が生成されているっぽいです。 > gdbで丹念に追ったところ、"%d" に 1 未満の Float を与えると再現し > ました。原因は rb_dbl2big か? > > tietew@tomoyo:~$ ruby -ve 'p "%d" % 0.9' > ruby 1.8.6 (2007-08-07 patchlevel 5000) [x86_64-linux] > -e:1:in `%': negative allocation size (or too big) (NoMemoryError) とりあえず下のパッチで直りました。 より良い修正がありましたら誰かよろしくお願いします。 Index: bignum.c =================================================================== --- bignum.c (リビジョン 12928) +++ bignum.c (作業コピー) @@ -885,6 +885,9 @@ if (isnan(d)) { rb_raise(rb_eFloatDomainError, "NaN"); } + if ((long)u == 0) { + return INT2FIX(0); + } while (!POSFIXABLE(u) || 0 != (long)u) { u /= (double)(BIGRAD); -- Tietew Blog: http://www.tietew.jp/ PGP: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA