1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* util.c (ruby_strtod): check integr overflow.

[ruby-dev:42180] #3789

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29186 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2010-09-06 00:46:48 +00:00
parent fab386fbff
commit 0ed5aee000
3 changed files with 17 additions and 6 deletions

View file

@ -1,3 +1,8 @@
Mon Sep 6 09:44:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
* util.c (ruby_strtod): check integr overflow.
[ruby-dev:42180] #3789
Mon Sep 6 06:17:21 2010 Tanaka Akira <akr@fsij.org> Mon Sep 6 06:17:21 2010 Tanaka Akira <akr@fsij.org>
* ext/pathname/pathname.c (path_readable_p): Pathname#readable? * ext/pathname/pathname.c (path_readable_p): Pathname#readable?

View file

@ -448,6 +448,7 @@ class TestFloat < Test::Unit::TestCase
assert_raise(ArgumentError) { Float("1.0\x001") } assert_raise(ArgumentError) { Float("1.0\x001") }
assert_equal(15.9375, Float('0xf.fp0')) assert_equal(15.9375, Float('0xf.fp0'))
assert_raise(ArgumentError) { Float('0xf.fp') } assert_raise(ArgumentError) { Float('0xf.fp') }
assert_equal(Float::INFINITY, Float('0xf.fp1000000000000000'))
assert_equal(1, suppress_warning {Float("1e10_00")}.infinite?) assert_equal(1, suppress_warning {Float("1e10_00")}.infinite?)
assert_raise(TypeError) { Float(nil) } assert_raise(TypeError) { Float(nil) }
o = Object.new o = Object.new

5
util.c
View file

@ -2149,6 +2149,11 @@ break2:
nd += c; nd += c;
nd -= '0'; nd -= '0';
c = *++s; c = *++s;
/* Float("0x0."+("0"*267)+"1fp2095") */
if (abs(nd) > 2095) {
while ('0' <= c && c <= '9') c = *++s;
break;
}
} while ('0' <= c && c <= '9'); } while ('0' <= c && c <= '9');
dval(rv) = ldexp(adj, nd * dsign); dval(rv) = ldexp(adj, nd * dsign);
} }