From: Joe Tsai Date: Sun, 21 Aug 2022 09:52:01 +0000 (-0700) Subject: time: fix Parse for time zones X-Git-Tag: go1.20rc1~1466 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c94633d2f89119e0f6788db09bd3df5153243f37;p=gostls13.git time: fix Parse for time zones The hours, minutes, and seconds fields for time zones should not have any plus or minus signs. Use getnum instead of atoi since the latter implicitly handles leading signs, while the former does not. Fixes #54570 Change-Id: If9600170af3af999739c27d81958e3649946913a Reviewed-on: https://go-review.googlesource.com/c/go/+/425038 Reviewed-by: David Chase TryBot-Result: Gopher Robot Reviewed-by: Ian Lance Taylor 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 a278cd9e6b..1887e6bce6 100644 --- a/src/time/format.go +++ b/src/time/format.go @@ -1233,12 +1233,12 @@ func parse(layout, value string, defaultLocation, local *Location) (Time, error) sign, hour, min, seconds, value = value[0:1], value[1:3], value[3:5], "00", value[5:] } var hr, mm, ss int - hr, err = atoi(hour) + hr, _, err = getnum(hour, true) if err == nil { - mm, err = atoi(min) + mm, _, err = getnum(min, true) } if err == nil { - ss, err = atoi(seconds) + ss, _, err = getnum(seconds, true) } zoneOffset = (hr*60+mm)*60 + ss // offset is in seconds switch sign[0] { diff --git a/src/time/format_test.go b/src/time/format_test.go index e8caa5e1a4..5c18ef45de 100644 --- a/src/time/format_test.go +++ b/src/time/format_test.go @@ -604,6 +604,10 @@ var parseErrorTests = []ParseErrorTest{ // issue 45391. {`"2006-01-02T15:04:05Z07:00"`, "0", `parsing time "0" as "\"2006-01-02T15:04:05Z07:00\"": cannot parse "0" as "\""`}, {RFC3339, "\"", `parsing time "\"" as "2006-01-02T15:04:05Z07:00": cannot parse "\"" as "2006"`}, + + // issue 54570 + {RFC3339, "0000-01-01T00:00:00+00:+0", `parsing time "0000-01-01T00:00:00+00:+0" as "2006-01-02T15:04:05Z07:00": cannot parse "" as "Z07:00"`}, + {RFC3339, "0000-01-01T00:00:00+-0:00", `parsing time "0000-01-01T00:00:00+-0:00" as "2006-01-02T15:04:05Z07:00": cannot parse "" as "Z07:00"`}, } func TestParseErrors(t *testing.T) {