From: Joe Tsai Date: Sun, 21 Aug 2022 09:21:49 +0000 (-0700) Subject: time: fix Parse for empty seconds X-Git-Tag: go1.20rc1~1467 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f9cdc09497af299ef6a4d4d745aa0df4ebfdce52;p=gostls13.git time: fix Parse for empty seconds The error return value of the seconds field is overwritten and not checked in the presence of a fractional second. Perform an explicit check for errors. Fixes #54569 Change-Id: I1204c8bdcd5a5a09b773d9e44748141ed1e5cb20 Reviewed-on: https://go-review.googlesource.com/c/go/+/425036 Reviewed-by: Ian Lance Taylor TryBot-Result: Gopher Robot Reviewed-by: David Chase Run-TryBot: Joseph Tsai Auto-Submit: Joseph Tsai Reviewed-by: Rob Pike --- diff --git a/src/time/format.go b/src/time/format.go index ed2a0a8fc6..a278cd9e6b 100644 --- a/src/time/format.go +++ b/src/time/format.go @@ -1135,6 +1135,9 @@ func parse(layout, value string, defaultLocation, local *Location) (Time, error) } case stdSecond, stdZeroSecond: sec, value, err = getnum(value, std == stdZeroSecond) + if err != nil { + break + } if sec < 0 || 60 <= sec { rangeErrString = "second" break diff --git a/src/time/format_test.go b/src/time/format_test.go index 0e5b92440e..e8caa5e1a4 100644 --- a/src/time/format_test.go +++ b/src/time/format_test.go @@ -591,6 +591,8 @@ var parseErrorTests = []ParseErrorTest{ {RFC3339, "2006-01-02T15:04:05Z_abc", `parsing time "2006-01-02T15:04:05Z_abc": extra text: "_abc"`}, // invalid second followed by optional fractional seconds {RFC3339, "2010-02-04T21:00:67.012345678-08:00", "second out of range"}, + // issue 54569 + {RFC3339, "0000-01-01T00:00:.0+00:00", `parsing time "0000-01-01T00:00:.0+00:00" as "2006-01-02T15:04:05Z07:00": cannot parse ".0+00:00" as "05"`}, // issue 21113 {"_2 Jan 06 15:04 MST", "4 --- 00 00:00 GMT", "cannot parse"}, {"_2 January 06 15:04 MST", "4 --- 00 00:00 GMT", "cannot parse"},