From 1ffc59ee1161f9330058dc115e3589b4998ad09a Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Sat, 22 Feb 2020 18:57:57 +0000 Subject: Fix date reading In the British TZ the following time: ``` 1579639200 +0100 ``` will be erroneously parsed as being with the GMT TZ. This leads to multiple errors with GPG validation. This PR fixes this by using the provided TZ information to create a FixedZone and sets that as the TZ Signed-off-by: Andrew Thornton --- plumbing/object/object.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'plumbing/object/object.go') diff --git a/plumbing/object/object.go b/plumbing/object/object.go index e960e50..0d891ad 100644 --- a/plumbing/object/object.go +++ b/plumbing/object/object.go @@ -138,17 +138,22 @@ func (s *Signature) decodeTimeAndTimeZone(b []byte) { return } - // Include a dummy year in this time.Parse() call to avoid a bug in Go: - // https://github.com/golang/go/issues/19750 - // - // Parsing the timezone with no other details causes the tl.Location() call - // below to return time.Local instead of the parsed zone in some cases - tl, err := time.Parse("2006 -0700", "1970 "+string(b[tzStart:tzStart+timeZoneLength])) + timezone := string(b[tzStart : tzStart+timeZoneLength]) + tzhours, err := strconv.ParseInt(timezone[0:3], 10, 64) if err != nil { return } + tzmins, err := strconv.ParseInt(timezone[3:], 10, 64) + if err != nil { + return + } + if tzhours < 0 { + tzmins *= -1 + } + + tz := time.FixedZone("", int(tzhours*60*60+tzmins*60)) - s.When = s.When.In(tl.Location()) + s.When = s.When.In(tz) } func (s *Signature) encodeTimeAndTimeZone(w io.Writer) error { -- cgit