ruby-changes:17534
From: naruse <ko1@a...>
Date: Wed, 20 Oct 2010 10:48:35 +0900 (JST)
Subject: [ruby-changes:17534] Ruby:r29539 (trunk): * util.c (ruby_strtod): reject 0x1.p+0. #3966
naruse 2010-10-20 10:48:24 +0900 (Wed, 20 Oct 2010) New Revision: 29539 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29539 Log: * util.c (ruby_strtod): reject 0x1.p+0. [ruby-dev:42432] #3966 Modified files: trunk/ChangeLog trunk/test/ruby/test_float.rb trunk/util.c Index: ChangeLog =================================================================== --- ChangeLog (revision 29538) +++ ChangeLog (revision 29539) @@ -1,3 +1,7 @@ +Wed Oct 20 10:47:21 2010 NARUSE, Yui <naruse@r...> + + * util.c (ruby_strtod): reject 0x1.p+0. [ruby-dev:42432] #3966 + Wed Oct 20 10:00:57 2010 NARUSE, Yui <naruse@r...> * vsnprintf.c (BSD_vfprintf): print floating point on "%#a". Index: util.c =================================================================== --- util.c (revision 29538) +++ util.c (revision 29539) @@ -2132,10 +2132,11 @@ if (*s == '.') { aadj = 1.; - while (*++s && (s1 = strchr(hexdigit, *s))) { + if (!*++s || !(s1 = strchr(hexdigit, *s))) goto ret0; + do { aadj /= 16; adj += aadj * ((s1 - hexdigit) & 15); - } + } while (*++s && (s1 = strchr(hexdigit, *s))); } if (*s == 'P' || *s == 'p') { Index: test/ruby/test_float.rb =================================================================== --- test/ruby/test_float.rb (revision 29538) +++ test/ruby/test_float.rb (revision 29539) @@ -88,13 +88,15 @@ assert_raise(ArgumentError){Float("-.")} assert_raise(ArgumentError){Float("1e")} assert_raise(ArgumentError){Float("1__1")} + assert_raise(ArgumentError){Float("1.")} + assert_raise(ArgumentError){Float("1.e+00")} + assert_raise(ArgumentError){Float("0x1.p+0")} # add expected behaviour here. assert_equal(10, Float("1_0")) 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(1.0, Float("0X1.P+0")) assert_equal(1024.0, Float("0x1p10")) assert_equal(1024.0, Float("0x1p+10")) assert_equal(0.0009765625, Float("0x1p-10")) @@ -452,7 +454,7 @@ 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.p0') } assert_raise(ArgumentError) { Float('0xf.f') } assert_raise(ArgumentError) { Float('0xf.fp') } assert_equal(Float::INFINITY, Float('0xf.fp1000000000000000')) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/