-
Notifications
You must be signed in to change notification settings - Fork 572
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
harden datetime verification (#1702)
* syntax: add datetime validator (and interop tests) * syntax: improve datetime normalization * lexicon: stronger datetime validation (from syntax package) * syntax: make datetime syntax norm test more flexible * make fmt * datetime: docs, normalize and always variant * bsky replace toSimplifiedISOSafe with normalizeDatetimeAlways * more rigorous datetime parsing on record creation * handle negative dates * syntax: disallow datetimes before year 0010 * syntax: datetime normalization functions validate output --------- Co-authored-by: dholms <[email protected]>
- Loading branch information
Showing
24 changed files
with
413 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# superficial syntax parses ok, but are not valid datetimes for semantic reasons (eg, "month zero") | ||
1985-00-12T23:20:50.123Z | ||
1985-04-00T23:20:50.123Z | ||
1985-13-12T23:20:50.123Z | ||
1985-04-12T25:20:50.123Z | ||
1985-04-12T23:99:50.123Z | ||
1985-04-12T23:20:61.123Z |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
|
||
# subtle changes to: 1985-04-12T23:20:50.123Z | ||
1985-04-12T23:20:50.123z | ||
01985-04-12T23:20:50.123Z | ||
985-04-12T23:20:50.123Z | ||
1985-04-12T23:20:50.Z | ||
1985-04-32T23;20:50.123Z | ||
1985-04-32T23;20:50.123Z | ||
|
||
# en-dash and em-dash | ||
1985—04-32T23;20:50.123Z | ||
1985–04-32T23;20:50.123Z | ||
|
||
# whitespace | ||
1985-04-12T23:20:50.123Z | ||
1985-04-12T23:20:50.123Z | ||
1985-04-12T 23:20:50.123Z | ||
|
||
# not enough zero padding | ||
1985-4-12T23:20:50.123Z | ||
1985-04-2T23:20:50.123Z | ||
1985-04-12T3:20:50.123Z | ||
1985-04-12T23:0:50.123Z | ||
1985-04-12T23:20:5.123Z | ||
|
||
# too much zero padding | ||
01985-04-12T23:20:50.123Z | ||
1985-004-12T23:20:50.123Z | ||
1985-04-012T23:20:50.123Z | ||
1985-04-12T023:20:50.123Z | ||
1985-04-12T23:020:50.123Z | ||
1985-04-12T23:20:050.123Z | ||
|
||
# strict capitalization (ISO-8601) | ||
1985-04-12t23:20:50.123Z | ||
1985-04-12T23:20:50.123z | ||
|
||
# RFC-3339, but not ISO-8601 | ||
1985-04-12T23:20:50.123-00:00 | ||
1985-04-12_23:20:50.123Z | ||
1985-04-12 23:20:50.123Z | ||
|
||
# ISO-8601, but weird | ||
1985-04-274T23:20:50.123Z | ||
|
||
# timezone is required | ||
1985-04-12T23:20:50.123 | ||
1985-04-12T23:20:50 | ||
|
||
1985-04-12 | ||
1985-04-12T23:20Z | ||
1985-04-12T23:20:5Z | ||
1985-04-12T23:20:50.123 | ||
+001985-04-12T23:20:50.123Z | ||
23:20:50.123Z | ||
|
||
1985-04-12T23:20:50.123+00 | ||
1985-04-12T23:20:50.123+00:0 | ||
1985-04-12T23:20:50.123+0:00 | ||
1985-04-12T23:20:50.123 | ||
1985-04-12T23:20:50.123+0000 | ||
1985-04-12T23:20:50.123+00 | ||
1985-04-12T23:20:50.123+ | ||
1985-04-12T23:20:50.123- | ||
|
||
# ISO-8601, but normalizes to a negative time | ||
0000-01-01T00:00:00+01:00 | ||
-000001-12-31T23:00:00.000Z |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# "preferred" | ||
1985-04-12T23:20:50.123Z | ||
1985-04-12T23:20:50.000Z | ||
2000-01-01T00:00:00.000Z | ||
1985-04-12T23:20:50.123456Z | ||
1985-04-12T23:20:50.120Z | ||
1985-04-12T23:20:50.120000Z | ||
|
||
# "supported" | ||
1985-04-12T23:20:50.1235678912345Z | ||
1985-04-12T23:20:50.100Z | ||
1985-04-12T23:20:50Z | ||
1985-04-12T23:20:50.0Z | ||
1985-04-12T23:20:50.123+00:00 | ||
1985-04-12T23:20:50.123-07:00 | ||
1985-04-12T23:20:50.123+07:00 | ||
1985-04-12T23:20:50.123+01:45 | ||
0985-04-12T23:20:50.123-07:00 | ||
1985-04-12T23:20:50.123-07:00 | ||
0123-01-01T00:00:00.000Z | ||
|
||
# various precisions, up through at least 12 digits | ||
1985-04-12T23:20:50.1Z | ||
1985-04-12T23:20:50.12Z | ||
1985-04-12T23:20:50.123Z | ||
1985-04-12T23:20:50.1234Z | ||
1985-04-12T23:20:50.12345Z | ||
1985-04-12T23:20:50.123456Z | ||
1985-04-12T23:20:50.1234567Z | ||
1985-04-12T23:20:50.12345678Z | ||
1985-04-12T23:20:50.123456789Z | ||
1985-04-12T23:20:50.1234567890Z | ||
1985-04-12T23:20:50.12345678901Z | ||
1985-04-12T23:20:50.123456789012Z | ||
|
||
# extreme but currently allowed | ||
0010-12-31T23:00:00.000Z | ||
1000-12-31T23:00:00.000Z | ||
1900-12-31T23:00:00.000Z | ||
3001-12-31T23:00:00.000Z |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.