* bignum.c (bigtrunc): RBIGNUM(x)->len may be zero. out of bound
access. [ruby-dev:31404] * sprintf.c (rb_str_format): small float should not call rb_dbl2big(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
04176dc21f
commit
bef0b1fa36
2
.gdbinit
2
.gdbinit
@ -2,7 +2,7 @@ define rp
|
|||||||
if (VALUE)$arg0 & 1
|
if (VALUE)$arg0 & 1
|
||||||
printf "FIXNUM: %d\n", $arg0 >> 1
|
printf "FIXNUM: %d\n", $arg0 >> 1
|
||||||
else
|
else
|
||||||
if ((VALUE)$arg0 & ~(~(VALUE)0<<RUBY_SPECIAL_SHIFT)) == SYMBOL_FLAG
|
if ((VALUE)$arg0 & ~(~(VALUE)0<<RUBY_SPECIAL_SHIFT)) == RUBY_SYMBOL_FLAG
|
||||||
printf "SYMBOL(%d)\n", $arg0 >> 8
|
printf "SYMBOL(%d)\n", $arg0 >> 8
|
||||||
else
|
else
|
||||||
if $arg0 == 0
|
if $arg0 == 0
|
||||||
|
@ -18,6 +18,14 @@ Fri Aug 17 01:21:29 2007 Koichi Sasada <ko1@atdot.net>
|
|||||||
|
|
||||||
* insns.def (throw): insert a RUBY_VM_CHECK_INTS(). [ruby-dev:31361]
|
* insns.def (throw): insert a RUBY_VM_CHECK_INTS(). [ruby-dev:31361]
|
||||||
|
|
||||||
|
Thu Aug 16 20:40:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* bignum.c (bigtrunc): RBIGNUM(x)->len may be zero. out of bound
|
||||||
|
access. [ruby-dev:31404]
|
||||||
|
|
||||||
|
* sprintf.c (rb_str_format): small float should not call
|
||||||
|
rb_dbl2big().
|
||||||
|
|
||||||
Thu Aug 16 22:10:06 2007 Koichi Sasada <ko1@atdot.net>
|
Thu Aug 16 22:10:06 2007 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
* compile.c (iseq_compile_each): fix next/redo stack consistency.
|
* compile.c (iseq_compile_each): fix next/redo stack consistency.
|
||||||
|
1
bignum.c
1
bignum.c
@ -97,6 +97,7 @@ bigtrunc(VALUE x)
|
|||||||
long len = RBIGNUM(x)->len;
|
long len = RBIGNUM(x)->len;
|
||||||
BDIGIT *ds = BDIGITS(x);
|
BDIGIT *ds = BDIGITS(x);
|
||||||
|
|
||||||
|
if (len == 0) return x;
|
||||||
while (--len && !ds[len]);
|
while (--len && !ds[len]);
|
||||||
RBIGNUM(x)->len = ++len;
|
RBIGNUM(x)->len = ++len;
|
||||||
return x;
|
return x;
|
||||||
|
@ -522,6 +522,10 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||||||
bin_retry:
|
bin_retry:
|
||||||
switch (TYPE(val)) {
|
switch (TYPE(val)) {
|
||||||
case T_FLOAT:
|
case T_FLOAT:
|
||||||
|
if (FIXABLE((long)RFLOAT(val)->value)) {
|
||||||
|
val = LONG2FIX((long)RFLOAT(val)->value);
|
||||||
|
goto bin_retry;
|
||||||
|
}
|
||||||
val = rb_dbl2big(RFLOAT(val)->value);
|
val = rb_dbl2big(RFLOAT(val)->value);
|
||||||
if (FIXNUM_P(val)) goto bin_retry;
|
if (FIXNUM_P(val)) goto bin_retry;
|
||||||
bignum = 1;
|
bignum = 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user