]> Cypherpunks repositories - gostls13.git/commitdiff
time: handle int64 overflow in ParseDuration.
authorAdam Langley <agl@golang.org>
Mon, 10 Mar 2014 16:33:45 +0000 (12:33 -0400)
committerAdam Langley <agl@golang.org>
Mon, 10 Mar 2014 16:33:45 +0000 (12:33 -0400)
Previously, passing a long duration to ParseDuration could result in
random, even negative, values.

LGTM=r
R=golang-codereviews, bradfitz, r
CC=golang-codereviews
https://golang.org/cl/72120043

src/pkg/time/format.go
src/pkg/time/time_test.go

index 6f92c126268b3cf886bdab3d513d1ebf54ffb615..b9da7ba42a72b72f9b3229fddb7fe9b8102076e6 100644 (file)
@@ -1240,5 +1240,8 @@ func ParseDuration(s string) (Duration, error) {
        if neg {
                f = -f
        }
+       if f < float64(-1<<63) || f > float64(1<<63-1) {
+               return 0, errors.New("time: overflow parsing duration")
+       }
        return Duration(f), nil
 }
index 2615517d9ad13c08188214d2f2418915cb7df644..4ae7da5a443a6706089f9e8bd7b5f3b35e3a5fff 100644 (file)
@@ -842,6 +842,7 @@ var parseDurationTests = []struct {
        {"-.", false, 0},
        {".s", false, 0},
        {"+.s", false, 0},
+       {"3000000h", false, 0}, // overflow
 }
 
 func TestParseDuration(t *testing.T) {