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>
|
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.
|
* 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)) {
|
else if (BIGZEROP(x)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
else if (RBIGNUM_LEN(x) >= LONG_MAX/BITSPERDIG) {
|
||||||
|
rb_raise(rb_eRangeError, "bignum too big to convert into `string'");
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
bits = BITSPERDIG*RBIGNUM_LEN(x);
|
bits = BITSPERDIG*RBIGNUM_LEN(x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -377,4 +377,13 @@ class TestBignum < Test::Unit::TestCase
|
||||||
def test_interrupt
|
def test_interrupt
|
||||||
assert(interrupt { (65536 ** 65536).to_s })
|
assert(interrupt { (65536 ** 65536).to_s })
|
||||||
end
|
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
|
end
|
||||||
|
|
Loading…
Reference in a new issue