diff --git a/decode.go b/decode.go index 4092068..f3f14ef 100644 --- a/decode.go +++ b/decode.go @@ -230,8 +230,8 @@ func parseLocalTime(b []byte) (LocalTime, []byte, error) { return t, nil, err } - if t.Second > 60 { - return t, nil, unstable.NewParserError(b[6:8], "seconds cannot be greater 60") + if t.Second > 59 { + return t, nil, unstable.NewParserError(b[6:8], "seconds cannot be greater than 59") } b = b[8:] diff --git a/localtime.go b/localtime.go index a856bfd..502ef2f 100644 --- a/localtime.go +++ b/localtime.go @@ -45,7 +45,7 @@ func (d *LocalDate) UnmarshalText(b []byte) error { type LocalTime struct { Hour int // Hour of the day: [0; 24[ Minute int // Minute of the hour: [0; 60[ - Second int // Second of the minute: [0; 60[ + Second int // Second of the minute: [0; 59] Nanosecond int // Nanoseconds within the second: [0, 1000000000[ Precision int // Number of digits to display for Nanosecond. } diff --git a/unmarshaler_test.go b/unmarshaler_test.go index cdaf509..63fc227 100644 --- a/unmarshaler_test.go +++ b/unmarshaler_test.go @@ -3160,7 +3160,17 @@ world'`, { desc: "invalid seconds value", data: `a=1979-05-27T12:45:99`, - msg: `seconds cannot be greater 60`, + msg: `seconds cannot be greater than 59`, + }, + { + desc: "leap second not supported", + data: `a=1979-05-27T12:45:60`, + msg: `seconds cannot be greater than 59`, + }, + { + desc: "leap second with max date causes overflow", + data: `s=9999-12-31 23:59:60z`, + msg: `seconds cannot be greater than 59`, }, { desc: `binary with invalid digit`,