| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| The IDNA codec decoder used on DNS hostnames by :mod:`socket` or :mod:`asyncio` | ||
| related name resolution functions no longer involves a quadratic algorithm. | ||
| This prevents a potential CPU denial of service if an out-of-spec excessive | ||
| length hostname involving bidirectional characters were decoded. Some protocols | ||
| such as :mod:`urllib` http ``3xx`` redirects potentially allow for an attacker | ||
| to supply such a name. | ||
|
|
||
| Individual labels within an IDNA encoded DNS name will now raise an error early | ||
| during IDNA decoding if they are longer than 1024 unicode characters given that | ||
| each decoded DNS label must be 63 or fewer characters and the entire decoded | ||
| DNS name is limited to 255. Only an application presenting a hostname or label | ||
| consisting primarily of :rfc:`3454` section 3.1 "Nothing" characters to be | ||
| removed would run into of this new limit. See also :rfc:`5894` section 6 and | ||
| :rfc:`3491`. | ||
| Back | FazBrowse Home | New Git URL |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityI'm okay with leaving this length limit out either entirely - or just out of the backports if release managers are uncomfortable with this in a bugfix.
I view it as protection from other as yet unknown future idna or punycode decoder logic bugs to avoid wasting cpu time. The only reference numbers related to my arbitrary input length limit choice are: A DNS hostname is 255 bytes at most. A label within a DNS name is 63 bytes at most.
The "Nothing" characters in question that are removed in nameprep() in https://github.com/python/cpython/blob/main/Lib/encodings/idna.py#L18 are non-ascii unicode oddities.
Other IDNA decoding libraries in the wild like the well known ICU library do not limit the length at this level of API, instead leaving that to higher levels in the application:
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.