ruby-changes:17239
From: naruse <ko1@a...>
Date: Mon, 13 Sep 2010 10:15:45 +0900 (JST)
Subject: [ruby-changes:17239] Ruby:r29239 (trunk): * util.c (ruby_strtod): reject Float('0x0.').
naruse 2010-09-13 10:15:39 +0900 (Mon, 13 Sep 2010) New Revision: 29239 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29239 Log: * util.c (ruby_strtod): reject Float('0x0.'). [ruby-dev:42239] Bug #3820 Modified files: trunk/ChangeLog trunk/test/ruby/test_float.rb trunk/util.c Index: ChangeLog =================================================================== --- ChangeLog (revision 29238) +++ ChangeLog (revision 29239) @@ -1,3 +1,8 @@ +Mon Sep 13 10:12:09 2010 NARUSE, Yui <naruse@r...> + + * util.c (ruby_strtod): reject Float('0x0.'). + [ruby-dev:42239] Bug #3820 + Mon Sep 13 09:23:58 2010 NARUSE, Yui <naruse@r...> * ext/openssl/ossl_bn.c (ossl_bn_is_prime): fix comparison Index: util.c =================================================================== --- util.c (revision 29238) +++ util.c (revision 29239) @@ -2122,6 +2122,7 @@ static const char hexdigit[] = "0123456789abcdef0123456789ABCDEF"; s0 = ++s; adj = 0; + aadj = -1; if (!*++s || !(s1 = strchr(hexdigit, *s))) goto ret0; do { @@ -2159,6 +2160,7 @@ dval(rv) = ldexp(adj, nd * dsign); } else { + if (aadj != -1) goto ret0; dval(rv) = adj; } goto ret; Index: test/ruby/test_float.rb =================================================================== --- test/ruby/test_float.rb (revision 29238) +++ test/ruby/test_float.rb (revision 29239) @@ -94,7 +94,6 @@ assert_equal([ 0.0].pack('G'), [Float(" 0x0p+0").to_f].pack('G')) assert_equal([-0.0].pack('G'), [Float("-0x0p+0").to_f].pack('G')) assert_equal(255.0, Float("0Xff")) - assert_equal(255.5, Float("0Xff.8")) assert_equal(1.0, Float("0X1.P+0")) assert_equal(1024.0, Float("0x1p10")) assert_equal(1024.0, Float("0x1p+10")) @@ -448,6 +447,13 @@ assert_raise(ArgumentError) { Float("1.0\x001") } assert_equal(15.9375, Float('0xf.fp0')) assert_raise(ArgumentError) { Float('0x') } + assert_equal(15, Float('0xf')) + assert_equal(15, Float('0xfp0')) + assert_raise(ArgumentError) { Float('0xfp') } + assert_raise(ArgumentError) { Float('0xf.') } + assert_raise(ArgumentError) { Float('0xf.p') } + assert_equal(15, Float('0xf.p0')) + assert_raise(ArgumentError) { Float('0xf.f') } assert_raise(ArgumentError) { Float('0xf.fp') } assert_equal(Float::INFINITY, Float('0xf.fp1000000000000000')) assert_equal(1, suppress_warning {Float("1e10_00")}.infinite?) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/