mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* bignum.c (big2str_find_n1): check integer overflow.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15646 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cd89edc065
commit
4a65cba488
3 changed files with 16 additions and 0 deletions
|
@ -1,3 +1,7 @@
|
|||
Sat Mar 1 02:35:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* bignum.c (big2str_find_n1): check integer overflow.
|
||||
|
||||
Sat Mar 1 00:29:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* encoding.c (rb_enc_dummy_p): bootstrap encodings can not be dummy.
|
||||
|
|
3
bignum.c
3
bignum.c
|
@ -829,6 +829,9 @@ big2str_find_n1(VALUE x, int base)
|
|||
else if (BIGZEROP(x)) {
|
||||
return 0;
|
||||
}
|
||||
else if (RBIGNUM_LEN(x) >= LONG_MAX/BITSPERDIG) {
|
||||
rb_raise(rb_eRangeError, "bignum too big to convert into `string'");
|
||||
}
|
||||
else {
|
||||
bits = BITSPERDIG*RBIGNUM_LEN(x);
|
||||
}
|
||||
|
|
|
@ -377,4 +377,13 @@ class TestBignum < Test::Unit::TestCase
|
|||
def test_interrupt
|
||||
assert(interrupt { (65536 ** 65536).to_s })
|
||||
end
|
||||
|
||||
def test_too_big_to_s
|
||||
i = 32
|
||||
while (big = 2**(i-1)-1).is_a?(Fixnum)
|
||||
i *= 2
|
||||
end
|
||||
e = assert_raise(RangeError) {(1 << big).to_s}
|
||||
assert_match(/too big to convert/, e.message)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue