From: Adam Langley Date: Mon, 5 Mar 2012 16:31:24 +0000 (-0500) Subject: encoding/asn1: handle UTCTime before the year 2000 X-Git-Tag: weekly.2012-03-13~237 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6aed6130309c5567015069599712671a99444fd1;p=gostls13.git encoding/asn1: handle UTCTime before the year 2000 UTCTime only has a two digit date field and year values from 50 should be 1950, not 2050. R=golang-dev, r, rsc CC=golang-dev https://golang.org/cl/5729063 --- diff --git a/src/pkg/encoding/asn1/asn1.go b/src/pkg/encoding/asn1/asn1.go index 4d1ae38c4e..3bf81a68cf 100644 --- a/src/pkg/encoding/asn1/asn1.go +++ b/src/pkg/encoding/asn1/asn1.go @@ -250,10 +250,14 @@ func parseBase128Int(bytes []byte, initOffset int) (ret, offset int, err error) func parseUTCTime(bytes []byte) (ret time.Time, err error) { s := string(bytes) ret, err = time.Parse("0601021504Z0700", s) - if err == nil { - return + if err != nil { + ret, err = time.Parse("060102150405Z0700", s) } - ret, err = time.Parse("060102150405Z0700", s) + if err == nil && ret.Year() >= 2050 { + // UTCTime only encodes times prior to 2050. See https://tools.ietf.org/html/rfc5280#section-4.1.2.5.1 + ret = ret.AddDate(-100, 0, 0) + } + return }