From 2af3a1fe1a50c375734c0abd8bc204fd1f55e1d5 Mon Sep 17 00:00:00 2001 From: David Harsha Date: Sun, 15 Jun 2025 16:08:17 -0700 Subject: [PATCH 1/3] Test label separator position in hostname formats These are mostly meant to test that the additional `idn-hostname` label separators are treated like `.` and are only allowed between labels. --- .../draft-next/optional/format/hostname.json | 10 +++++ .../optional/format/idn-hostname.json | 40 +++++++++++++++++++ .../optional/format/hostname.json | 10 +++++ .../optional/format/idn-hostname.json | 40 +++++++++++++++++++ .../optional/format/hostname.json | 10 +++++ .../optional/format/idn-hostname.json | 40 +++++++++++++++++++ tests/draft4/optional/format/hostname.json | 10 +++++ tests/draft6/optional/format/hostname.json | 10 +++++ tests/draft7/optional/format/hostname.json | 10 +++++ .../draft7/optional/format/idn-hostname.json | 40 +++++++++++++++++++ 10 files changed, 220 insertions(+) diff --git a/tests/draft-next/optional/format/hostname.json b/tests/draft-next/optional/format/hostname.json index bc3a60dc..533d3dc3 100644 --- a/tests/draft-next/optional/format/hostname.json +++ b/tests/draft-next/optional/format/hostname.json @@ -130,6 +130,16 @@ "description": "single dot", "data": ".", "valid": false + }, + { + "description": "leading dot", + "data": ".example", + "valid": false + }, + { + "description": "trailing dot", + "data": "example.", + "valid": false } ] } diff --git a/tests/draft-next/optional/format/idn-hostname.json b/tests/draft-next/optional/format/idn-hostname.json index 1061f424..3355b2f0 100644 --- a/tests/draft-next/optional/format/idn-hostname.json +++ b/tests/draft-next/optional/format/idn-hostname.json @@ -383,6 +383,46 @@ "description": "halfwidth ideographic full stop as label separator", "data": "a\uff61b", "valid": true + }, + { + "description": "leading dot", + "data": ".example", + "valid": false + }, + { + "description": "leading ideographic full stop", + "data": "\u3002example", + "valid": false + }, + { + "description": "leading fullwidth full stop", + "data": "\uff0eexample", + "valid": false + }, + { + "description": "leading halfwidth ideographic full stop", + "data": "\uff61example", + "valid": false + }, + { + "description": "trailing dot", + "data": "example.", + "valid": false + }, + { + "description": "trailing ideographic full stop", + "data": "example\u3002", + "valid": false + }, + { + "description": "trailing fullwidth full stop", + "data": "example\uff0e", + "valid": false + }, + { + "description": "trailing halfwidth ideographic full stop", + "data": "example\uff61", + "valid": false } ] } diff --git a/tests/draft2019-09/optional/format/hostname.json b/tests/draft2019-09/optional/format/hostname.json index 24bfdfc5..b80bcbb0 100644 --- a/tests/draft2019-09/optional/format/hostname.json +++ b/tests/draft2019-09/optional/format/hostname.json @@ -130,6 +130,16 @@ "description": "single dot", "data": ".", "valid": false + }, + { + "description": "leading dot", + "data": ".example", + "valid": false + }, + { + "description": "trailing dot", + "data": "example.", + "valid": false } ] } diff --git a/tests/draft2019-09/optional/format/idn-hostname.json b/tests/draft2019-09/optional/format/idn-hostname.json index 348c504c..a368468a 100644 --- a/tests/draft2019-09/optional/format/idn-hostname.json +++ b/tests/draft2019-09/optional/format/idn-hostname.json @@ -383,6 +383,46 @@ "description": "halfwidth ideographic full stop as label separator", "data": "a\uff61b", "valid": true + }, + { + "description": "leading dot", + "data": ".example", + "valid": false + }, + { + "description": "leading ideographic full stop", + "data": "\u3002example", + "valid": false + }, + { + "description": "leading fullwidth full stop", + "data": "\uff0eexample", + "valid": false + }, + { + "description": "leading halfwidth ideographic full stop", + "data": "\uff61example", + "valid": false + }, + { + "description": "trailing dot", + "data": "example.", + "valid": false + }, + { + "description": "trailing ideographic full stop", + "data": "example\u3002", + "valid": false + }, + { + "description": "trailing fullwidth full stop", + "data": "example\uff0e", + "valid": false + }, + { + "description": "trailing halfwidth ideographic full stop", + "data": "example\uff61", + "valid": false } ] } diff --git a/tests/draft2020-12/optional/format/hostname.json b/tests/draft2020-12/optional/format/hostname.json index 57827c4d..a926d263 100644 --- a/tests/draft2020-12/optional/format/hostname.json +++ b/tests/draft2020-12/optional/format/hostname.json @@ -130,6 +130,16 @@ "description": "single dot", "data": ".", "valid": false + }, + { + "description": "leading dot", + "data": ".example", + "valid": false + }, + { + "description": "trailing dot", + "data": "example.", + "valid": false } ] } diff --git a/tests/draft2020-12/optional/format/idn-hostname.json b/tests/draft2020-12/optional/format/idn-hostname.json index f42ae969..ef1085c4 100644 --- a/tests/draft2020-12/optional/format/idn-hostname.json +++ b/tests/draft2020-12/optional/format/idn-hostname.json @@ -383,6 +383,46 @@ "description": "halfwidth ideographic full stop as label separator", "data": "a\uff61b", "valid": true + }, + { + "description": "leading dot", + "data": ".example", + "valid": false + }, + { + "description": "leading ideographic full stop", + "data": "\u3002example", + "valid": false + }, + { + "description": "leading fullwidth full stop", + "data": "\uff0eexample", + "valid": false + }, + { + "description": "leading halfwidth ideographic full stop", + "data": "\uff61example", + "valid": false + }, + { + "description": "trailing dot", + "data": "example.", + "valid": false + }, + { + "description": "trailing ideographic full stop", + "data": "example\u3002", + "valid": false + }, + { + "description": "trailing fullwidth full stop", + "data": "example\uff0e", + "valid": false + }, + { + "description": "trailing halfwidth ideographic full stop", + "data": "example\uff61", + "valid": false } ] } diff --git a/tests/draft4/optional/format/hostname.json b/tests/draft4/optional/format/hostname.json index 866a6178..61ebe6f7 100644 --- a/tests/draft4/optional/format/hostname.json +++ b/tests/draft4/optional/format/hostname.json @@ -122,6 +122,16 @@ "description": "single dot", "data": ".", "valid": false + }, + { + "description": "leading dot", + "data": ".example", + "valid": false + }, + { + "description": "trailing dot", + "data": "example.", + "valid": false } ] } diff --git a/tests/draft6/optional/format/hostname.json b/tests/draft6/optional/format/hostname.json index 866a6178..61ebe6f7 100644 --- a/tests/draft6/optional/format/hostname.json +++ b/tests/draft6/optional/format/hostname.json @@ -122,6 +122,16 @@ "description": "single dot", "data": ".", "valid": false + }, + { + "description": "leading dot", + "data": ".example", + "valid": false + }, + { + "description": "trailing dot", + "data": "example.", + "valid": false } ] } diff --git a/tests/draft7/optional/format/hostname.json b/tests/draft7/optional/format/hostname.json index 866a6178..61ebe6f7 100644 --- a/tests/draft7/optional/format/hostname.json +++ b/tests/draft7/optional/format/hostname.json @@ -122,6 +122,16 @@ "description": "single dot", "data": ".", "valid": false + }, + { + "description": "leading dot", + "data": ".example", + "valid": false + }, + { + "description": "trailing dot", + "data": "example.", + "valid": false } ] } diff --git a/tests/draft7/optional/format/idn-hostname.json b/tests/draft7/optional/format/idn-hostname.json index 5c8cdc77..c792766e 100644 --- a/tests/draft7/optional/format/idn-hostname.json +++ b/tests/draft7/optional/format/idn-hostname.json @@ -372,6 +372,46 @@ "description": "halfwidth ideographic full stop as label separator", "data": "a\uff61b", "valid": true + }, + { + "description": "leading dot", + "data": ".example", + "valid": false + }, + { + "description": "leading ideographic full stop", + "data": "\u3002example", + "valid": false + }, + { + "description": "leading fullwidth full stop", + "data": "\uff0eexample", + "valid": false + }, + { + "description": "leading halfwidth ideographic full stop", + "data": "\uff61example", + "valid": false + }, + { + "description": "trailing dot", + "data": "example.", + "valid": false + }, + { + "description": "trailing ideographic full stop", + "data": "example\u3002", + "valid": false + }, + { + "description": "trailing fullwidth full stop", + "data": "example\uff0e", + "valid": false + }, + { + "description": "trailing halfwidth ideographic full stop", + "data": "example\uff61", + "valid": false } ] } From d6b7fb32bda32f0ea21e95c687a68fa5d78a0be4 Mon Sep 17 00:00:00 2001 From: David Harsha Date: Sun, 15 Jun 2025 16:54:53 -0700 Subject: [PATCH 2/3] Test IDN label separator in `hostname` format Regular `hostname` should not support the extended label separators used in `idn-hostname`. --- tests/draft-next/optional/format/hostname.json | 5 +++++ tests/draft2019-09/optional/format/hostname.json | 5 +++++ tests/draft2020-12/optional/format/hostname.json | 5 +++++ tests/draft4/optional/format/hostname.json | 5 +++++ tests/draft6/optional/format/hostname.json | 5 +++++ tests/draft7/optional/format/hostname.json | 5 +++++ 6 files changed, 30 insertions(+) diff --git a/tests/draft-next/optional/format/hostname.json b/tests/draft-next/optional/format/hostname.json index 533d3dc3..13349021 100644 --- a/tests/draft-next/optional/format/hostname.json +++ b/tests/draft-next/optional/format/hostname.json @@ -140,6 +140,11 @@ "description": "trailing dot", "data": "example.", "valid": false + }, + { + "description": "IDN label separator", + "data": "example\uff0ecom", + "valid": false } ] } diff --git a/tests/draft2019-09/optional/format/hostname.json b/tests/draft2019-09/optional/format/hostname.json index b80bcbb0..ec91c5af 100644 --- a/tests/draft2019-09/optional/format/hostname.json +++ b/tests/draft2019-09/optional/format/hostname.json @@ -140,6 +140,11 @@ "description": "trailing dot", "data": "example.", "valid": false + }, + { + "description": "IDN label separator", + "data": "example\uff0ecom", + "valid": false } ] } diff --git a/tests/draft2020-12/optional/format/hostname.json b/tests/draft2020-12/optional/format/hostname.json index a926d263..f4e93d45 100644 --- a/tests/draft2020-12/optional/format/hostname.json +++ b/tests/draft2020-12/optional/format/hostname.json @@ -140,6 +140,11 @@ "description": "trailing dot", "data": "example.", "valid": false + }, + { + "description": "IDN label separator", + "data": "example\uff0ecom", + "valid": false } ] } diff --git a/tests/draft4/optional/format/hostname.json b/tests/draft4/optional/format/hostname.json index 61ebe6f7..e4bc4c88 100644 --- a/tests/draft4/optional/format/hostname.json +++ b/tests/draft4/optional/format/hostname.json @@ -132,6 +132,11 @@ "description": "trailing dot", "data": "example.", "valid": false + }, + { + "description": "IDN label separator", + "data": "example\uff0ecom", + "valid": false } ] } diff --git a/tests/draft6/optional/format/hostname.json b/tests/draft6/optional/format/hostname.json index 61ebe6f7..e4bc4c88 100644 --- a/tests/draft6/optional/format/hostname.json +++ b/tests/draft6/optional/format/hostname.json @@ -132,6 +132,11 @@ "description": "trailing dot", "data": "example.", "valid": false + }, + { + "description": "IDN label separator", + "data": "example\uff0ecom", + "valid": false } ] } diff --git a/tests/draft7/optional/format/hostname.json b/tests/draft7/optional/format/hostname.json index 61ebe6f7..e4bc4c88 100644 --- a/tests/draft7/optional/format/hostname.json +++ b/tests/draft7/optional/format/hostname.json @@ -132,6 +132,11 @@ "description": "trailing dot", "data": "example.", "valid": false + }, + { + "description": "IDN label separator", + "data": "example\uff0ecom", + "valid": false } ] } From bef99a31d338b76eec7bb88c9c2bd700aa1d3047 Mon Sep 17 00:00:00 2001 From: David Harsha Date: Sun, 15 Jun 2025 17:02:51 -0700 Subject: [PATCH 3/3] Test IDN label separators separate labels This tests that the extended label separators used in `idn-hostname` properly validate individual labels and don't treat the whole instance as a single label. --- .../optional/format/idn-hostname.json | 40 +++++++++++++++++++ .../optional/format/idn-hostname.json | 40 +++++++++++++++++++ .../optional/format/idn-hostname.json | 40 +++++++++++++++++++ .../draft7/optional/format/idn-hostname.json | 40 +++++++++++++++++++ 4 files changed, 160 insertions(+) diff --git a/tests/draft-next/optional/format/idn-hostname.json b/tests/draft-next/optional/format/idn-hostname.json index 3355b2f0..1fb2576a 100644 --- a/tests/draft-next/optional/format/idn-hostname.json +++ b/tests/draft-next/optional/format/idn-hostname.json @@ -423,6 +423,46 @@ "description": "trailing halfwidth ideographic full stop", "data": "example\uff61", "valid": false + }, + { + "description": "dot separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα.com", + "valid": true + }, + { + "description": "ideographic full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\u3002com", + "valid": true + }, + { + "description": "fullwidth full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff0ecom", + "valid": true + }, + { + "description": "halfwidth ideographic full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff61com", + "valid": true + }, + { + "description": "dot separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα.com", + "valid": false + }, + { + "description": "ideographic full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\u3002com", + "valid": false + }, + { + "description": "fullwidth full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff0ecom", + "valid": false + }, + { + "description": "halfwidth ideographic full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff61com", + "valid": false } ] } diff --git a/tests/draft2019-09/optional/format/idn-hostname.json b/tests/draft2019-09/optional/format/idn-hostname.json index a368468a..efb2d444 100644 --- a/tests/draft2019-09/optional/format/idn-hostname.json +++ b/tests/draft2019-09/optional/format/idn-hostname.json @@ -423,6 +423,46 @@ "description": "trailing halfwidth ideographic full stop", "data": "example\uff61", "valid": false + }, + { + "description": "dot separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα.com", + "valid": true + }, + { + "description": "ideographic full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\u3002com", + "valid": true + }, + { + "description": "fullwidth full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff0ecom", + "valid": true + }, + { + "description": "halfwidth ideographic full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff61com", + "valid": true + }, + { + "description": "dot separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα.com", + "valid": false + }, + { + "description": "ideographic full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\u3002com", + "valid": false + }, + { + "description": "fullwidth full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff0ecom", + "valid": false + }, + { + "description": "halfwidth ideographic full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff61com", + "valid": false } ] } diff --git a/tests/draft2020-12/optional/format/idn-hostname.json b/tests/draft2020-12/optional/format/idn-hostname.json index ef1085c4..cf72409c 100644 --- a/tests/draft2020-12/optional/format/idn-hostname.json +++ b/tests/draft2020-12/optional/format/idn-hostname.json @@ -423,6 +423,46 @@ "description": "trailing halfwidth ideographic full stop", "data": "example\uff61", "valid": false + }, + { + "description": "dot separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα.com", + "valid": true + }, + { + "description": "ideographic full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\u3002com", + "valid": true + }, + { + "description": "fullwidth full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff0ecom", + "valid": true + }, + { + "description": "halfwidth ideographic full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff61com", + "valid": true + }, + { + "description": "dot separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα.com", + "valid": false + }, + { + "description": "ideographic full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\u3002com", + "valid": false + }, + { + "description": "fullwidth full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff0ecom", + "valid": false + }, + { + "description": "halfwidth ideographic full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff61com", + "valid": false } ] } diff --git a/tests/draft7/optional/format/idn-hostname.json b/tests/draft7/optional/format/idn-hostname.json index c792766e..0fd86f00 100644 --- a/tests/draft7/optional/format/idn-hostname.json +++ b/tests/draft7/optional/format/idn-hostname.json @@ -412,6 +412,46 @@ "description": "trailing halfwidth ideographic full stop", "data": "example\uff61", "valid": false + }, + { + "description": "dot separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα.com", + "valid": true + }, + { + "description": "ideographic full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\u3002com", + "valid": true + }, + { + "description": "fullwidth full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff0ecom", + "valid": true + }, + { + "description": "halfwidth ideographic full stop separator with label that is too long when separator is ignored", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff61com", + "valid": true + }, + { + "description": "dot separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα.com", + "valid": false + }, + { + "description": "ideographic full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\u3002com", + "valid": false + }, + { + "description": "fullwidth full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff0ecom", + "valid": false + }, + { + "description": "halfwidth ideographic full stop separator with label that is too long when separator is respected", + "data": "παράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμαπαράδειγμα\uff61com", + "valid": false } ] }