From f664195bd09c9d9463a152babbdf53347726e082 Mon Sep 17 00:00:00 2001 From: bryan newbold Date: Thu, 4 Dec 2025 18:40:43 -0800 Subject: [PATCH] syntax: check for negative datetimes --- atproto/syntax/datetime.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/atproto/syntax/datetime.go b/atproto/syntax/datetime.go index 21b33fcd..3658c5d6 100644 --- a/atproto/syntax/datetime.go +++ b/atproto/syntax/datetime.go @@ -23,6 +23,7 @@ const ( type Datetime string var datetimeRegex = regexp.MustCompile(`^[0-9]{4}-[01][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9]:[0-6][0-9](.[0-9]{1,20})?(Z|([+-][0-2][0-9]:[0-5][0-9]))$`) +var astroZero = time.Date(0000, 1, 1, 0, 0, 0, 0, time.UTC) func ParseDatetime(raw string) (Datetime, error) { if raw == "" { @@ -39,10 +40,14 @@ func ParseDatetime(raw string) (Datetime, error) { return "", errors.New("Datetime can't use '-00:00' for UTC timezone, must use '+00:00', per ISO-8601") } // ensure that the datetime actually parses using golang time lib - _, err := time.Parse(time.RFC3339Nano, raw) + t, err := time.Parse(time.RFC3339Nano, raw) if err != nil { return "", err } + // times before astronomical zero are disallowed + if t.Before(astroZero) { + return "", errors.New("Datetime can not be before year zero") + } return Datetime(raw), nil } -- 2.51.2