mirror of
https://github.com/golang/go
synced 2024-11-12 09:10:21 -07:00
time: fix ParseDuration overflow when given more than 9 digits on 32-bit arch
Fixes #6617. R=golang-dev, rsc, r CC=golang-dev https://golang.org/cl/15080043
This commit is contained in:
parent
580ea8b5fd
commit
d220c9957c
@ -1204,11 +1204,11 @@ func ParseDuration(s string) (Duration, error) {
|
||||
if err != nil {
|
||||
return 0, errors.New("time: invalid duration " + orig)
|
||||
}
|
||||
scale := 1
|
||||
scale := 1.0
|
||||
for n := pl - len(s); n > 0; n-- {
|
||||
scale *= 10
|
||||
}
|
||||
g += float64(x) / float64(scale)
|
||||
g += float64(x) / scale
|
||||
post = pl != len(s)
|
||||
}
|
||||
if !pre && !post {
|
||||
|
@ -1318,6 +1318,8 @@ var parseDurationTests = []struct {
|
||||
{"39h9m14.425s", true, 39*Hour + 9*Minute + 14*Second + 425*Millisecond},
|
||||
// large value
|
||||
{"52763797000ns", true, 52763797000 * Nanosecond},
|
||||
// more than 9 digits after decimal point, see http://golang.org/issue/6617
|
||||
{"0.3333333333333333333h", true, 20 * Minute},
|
||||
|
||||
// errors
|
||||
{"", false, 0},
|
||||
|
Loading…
Reference in New Issue
Block a user