Skip to content

Accept internal hyphens in punycode top-level domains - #431

Merged
yezz123 merged 1 commit into
pydantic:mainfrom
charan-rathore:fix-punycode-tld-hyphens
Oct 1, 2026
Merged

yezz123 merged 1 commit into
pydantic:mainfrom
charan-rathore:fix-punycode-tld-hyphens

Conversation

@charan-rathore

Copy link
Copy Markdown
Contributor

DomainStr rejects example.xn--vermgensberater-ctb even though the suffix is an IANA-delegated top-level domain. The existing punycode branch permits only letters and digits after xn--, so it rejects the separator in A-labels that encode a mixture of ASCII and non-ASCII characters.

Allow internal hyphens in that branch while continuing to reject a trailing hyphen and labels longer than 63 characters. Add regression tests for two delegated TLDs, uppercase normalization, existing ASCII and punycode domains, and invalid label forms.

Related: #326. The earlier merged PR #330 does not cover this internal-hyphen case.

Validation on Python 3.12.12: new tests baseline 3 failed/6 passed; patched domain tests 38 passed; full suite 13612 passed. Ruff lint/format checks on changed files and domain.py mypy pass.

This validates the existing ASCII A-label syntax; it does not add Unicode domain input or full IDNA decoding. No DNS lookups, other Python versions or full-repository typecheck were tested. pandas 3.0.6/numpy 2.5.3 were installed separately because the base frozen lockfile omits pandas.

@yezz123
yezz123 merged commit d0f56dd into pydantic:main Oct 1, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants