Releases: kjd/idna
Releases · kjd/idna
Release list
v3.19
- Restore the
std3_rulesoption, which had no effect since changes
to UTS #46 processing in Unicode 16. Note thatuts46_remap()
defaults to enabling STD3 rules, so direct callers will see input
containing non-LDH ASCII characters rejected again. - Performance improvements to UTS #46 mapping, particularly for
ASCII-only domains. - Test on free-threaded CPython with the GIL disabled and document
thread safety. - Expose the Unicode version of the generated tables as
idna.unicode_version, and show it inidna --version. - Add
code,text,codepointandpositionattributes to
IDNAErrorso that the failed rule and the offending character can
be identified without parsing the exception message. - The deprecated
transitionalargument toencode()and
uts46_remap()is now completely ignored, and gives a deprecation warning
for the latter. - Reject A-labels that are not the canonical Punycode encoding of
their U-label. - Fix CONTEXTJ violations raising
IDNAErrorinstead of
InvalidCodepointContext. - Consistently raise
IDNAErrorfor empty labels and non-ASCII bytes
passed to label helper functions and the incremental codec. - Add property-based tests, extended fuzzing targets, coverage
measurement, and CI checks that the data tables match the generator
output. - Various code quality and tooling improvements.
Thanks to stefan6419846, LouieLuNZ, and Salvatore Corvaglia for
contributions to this release.
v3.18
- When decoding a domain, add a `display` argument that will pass through invalid labels rather than raising an exception.
v3.17
- Substantial 75% reduction in memory usage through new data structures and some optimization in processing speed. - Added a general 1024-character input length cap to the public validation, conversion, and codec entry points. This is well above any legitimate domain or label and guards against pathological inputs.
v3.16
- Add a command-line interface (`python -m idna`, also available as the `idna` script). Encodes or decodes one or more domains supplied as arguments or on standard input, with options to select A-label or U-label output and control error handling. - Raise the minimum supported Python version to 3.9 - Various code quality improvements
v3.15
- Enforce DNS-length cap on individual labels early in `check_label`, short-circuiting contextual-rule processing for oversized input while staying compatible with UTS 46 usage. - Tidy core helpers: hoist bidi category sets to module-level frozensets (avoiding per-codepoint list construction), simplify length checks, and reuse the shared `_unicode_dots_re` from `idna.core` in the codec module. - Use `raise ... from err` for proper exception chaining and switch internal string formatting to f-strings. - Allow `flit_core` 4.x in the build backend. - Expand the ruff lint set (flake8-bugbear, flake8-simplify, pyupgrade, perflint) and apply the surfaced fixes; pin lint CI to Python 3.14. - Add Dependabot configuration for GitHub Actions. - Convert README and HISTORY from reStructuredText to Markdown. - Reference CVE-2026-45409 for the 3.14 advisory in place of the initial GHSA identifier.
v3.14
- Removed opportunity to process long inputs into quadratic time by rejecting oversize inputs up-front. Closes a bypass of the CVE-2024-3651 mitigation. [GHSA-65pc-fj4g-8rjx]
v3.13
- Correct classification error for codepoint U+A7F1
v3.12
- Update to Unicode 17.0.0. - Issue a deprecation warning for the transitional argument. - Added lazy-loading to provide some performance improvements. - Removed vestiges of code related to Python 2 support, including segmentation of data structures specific to Jython.
v3.11
- Update to Unicode 16.0.0, including significant changes to UTS46 processing. As a result of Unicode ending support for it, transitional processing no longer has an effect and returns the same result. - Add support for Python 3.14, lowest supported version is Python 3.8. - Various updates to packaging, including PEP 740 support.
v3.10
- Reverted to Unicode 15.1.0 data. Unicode 16 has some significant changes to UTS46 processing that will require more work to properly implement.