summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-07-15 08:08:59 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-07-15 08:08:59 +0000
commit5292b2727a089821f2bf21dfcc8a7be899eb744c (patch)
tree915cfed250c76da4a41fe65143d8fa86f14e562a
parent363c90853ec4cceb58ef1d2d3192a8c65a35aa13 (diff)
util.c: do not underflow
* util.c (ruby_strtod): do not underflow only by preceeding zeros, which may be canceled out by the exponent. http://twitter.com/kazuho/status/753829998767714305 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55689 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--test/ruby/test_literal.rb1
-rw-r--r--util.c2
3 files changed, 8 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 1313d5c71aa..fdade505fc0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Fri Jul 15 17:08:57 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_strtod): do not underflow only by preceeding zeros,
+ which may be canceled out by the exponent.
+ http://twitter.com/kazuho/status/753829998767714305
+
Fri Jul 15 15:32:13 2016 NAKAMURA Usaku <usa@ruby-lang.org>
* time.c (time_arg): it seems that this function sometimes causes SEGV
diff --git a/test/ruby/test_literal.rb b/test/ruby/test_literal.rb
index c37b2065390..05b81f944d1 100644
--- a/test/ruby/test_literal.rb
+++ b/test/ruby/test_literal.rb
@@ -493,6 +493,7 @@ class TestRubyLiteral < Test::Unit::TestCase
}
}
}
+ assert_equal(100.0, 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100e100)
end
def test_symbol_list
diff --git a/util.c b/util.c
index 0b0c9358322..17819e522a9 100644
--- a/util.c
+++ b/util.c
@@ -2145,7 +2145,7 @@ break2:
for (; c >= '0' && c <= '9'; c = *++s) {
have_dig:
nz++;
- if (nf > DBL_DIG * 4) continue;
+ if (nd > DBL_DIG * 4) continue;
if (c -= '0') {
nf += nz;
for (i = 1; i < nz; i++)