From c94633d2f89119e0f6788db09bd3df5153243f37 Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Sun, 21 Aug 2022 02:52:01 -0700 Subject: [PATCH] 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 --- src/time/format.go | 6 +++--- src/time/format_test.go | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) 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) { -- 2.48.1