]> Cypherpunks repositories - gostls13.git/commitdiff
strconv: fix ParseFloat for special forms of zero values
authorRobert Griesemer <gri@golang.org>
Tue, 19 Apr 2016 21:42:15 +0000 (14:42 -0700)
committerRobert Griesemer <gri@golang.org>
Tue, 19 Apr 2016 22:39:43 +0000 (22:39 +0000)
Fixes #15364.

Change-Id: Id2a349896064c7c9e00e36c55162068bf18162b2
Reviewed-on: https://go-review.googlesource.com/22272
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/strconv/atof.go
src/strconv/atof_test.go

index ce76252340f548a8da52de66e546b47504e8568e..ada85e9fed69268f3feb94dc72fe9bd6cac01156 100644 (file)
@@ -244,7 +244,9 @@ func readFloat(s string) (mantissa uint64, exp int, neg, trunc, ok bool) {
                return
        }
 
-       exp = dp - ndMant
+       if mantissa != 0 {
+               exp = dp - ndMant
+       }
        ok = true
        return
 
index 9f70cc1fd7d4905b2213bf6b717cb3404de25be0..0a89c3e0bfa1a0ccc2ffd7298a774568aade8600 100644 (file)
@@ -42,6 +42,30 @@ var atoftests = []atofTest{
        {"1e-20", "1e-20", nil},
        {"625e-3", "0.625", nil},
 
+       // zeros
+       {"0", "0", nil},
+       {"0e0", "0", nil},
+       {"-0e0", "-0", nil},
+       {"+0e0", "0", nil},
+       {"0e-0", "0", nil},
+       {"-0e-0", "-0", nil},
+       {"+0e-0", "0", nil},
+       {"0e+0", "0", nil},
+       {"-0e+0", "-0", nil},
+       {"+0e+0", "0", nil},
+       {"0e+01234567890123456789", "0", nil},
+       {"0.00e-01234567890123456789", "0", nil},
+       {"-0e+01234567890123456789", "-0", nil},
+       {"-0.00e-01234567890123456789", "-0", nil},
+       {"0e291", "0", nil}, // issue 15364
+       {"0e292", "0", nil}, // issue 15364
+       {"0e347", "0", nil}, // issue 15364
+       {"0e348", "0", nil}, // issue 15364
+       {"-0e291", "-0", nil},
+       {"-0e292", "-0", nil},
+       {"-0e347", "-0", nil},
+       {"-0e348", "-0", nil},
+
        // NaNs
        {"nan", "NaN", nil},
        {"NaN", "NaN", nil},