[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]