]> Cypherpunks repositories - gostls13.git/commitdiff
strconv: ParseFloat: always return ErrSyntax for bad syntax
authorIan Lance Taylor <iant@golang.org>
Mon, 7 Jun 2021 17:51:33 +0000 (10:51 -0700)
committerIan Lance Taylor <iant@golang.org>
Mon, 7 Jun 2021 21:12:46 +0000 (21:12 +0000)
Previously we would sometimes return ErrRange if the parseable part of
the floating point number was out of range.

Fixes #46628

Change-Id: I15bbbb1e2a56fa27c19fe25ab5554d988cbfd9d2
Reviewed-on: https://go-review.googlesource.com/c/go/+/325750
Trust: Ian Lance Taylor <iant@golang.org>
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/strconv/atof.go
src/strconv/atof_test.go

index 9010a66ca8910bff4f3f886f3649aaab9edbcb59..57556c704751b5820b52ee1337edeff892ae4021 100644 (file)
@@ -689,7 +689,7 @@ func atof64(s string) (f float64, n int, err error) {
 // as their respective special floating point values. It ignores case when matching.
 func ParseFloat(s string, bitSize int) (float64, error) {
        f, n, err := parseFloatPrefix(s, bitSize)
-       if err == nil && n != len(s) {
+       if n != len(s) && (err == nil || err.(*NumError).Err != ErrSyntax) {
                return 0, syntaxError(fnParseFloat, s)
        }
        return f, err
index 3c058b9be5adc223414a498d6b27e812a0fba08d..aa587a473cdde8deff38643cf44983d773c9afc2 100644 (file)
@@ -342,6 +342,9 @@ var atoftests = []atofTest{
        {"0x12.345p-_12", "0", ErrSyntax},
        {"0x12.345p+1__2", "0", ErrSyntax},
        {"0x12.345p+12_", "0", ErrSyntax},
+
+       {"1e100x", "0", ErrSyntax},
+       {"1e1000x", "0", ErrSyntax},
 }
 
 var atof32tests = []atofTest{