feat: integrate find_ascii_non_printable for URL validation in urlparse

This commit is contained in:
Bakyt Niiazaliev 2025-07-06 01:37:23 +07:00
parent 248658ff77
commit e2a6f4bae7

View File

@ -25,7 +25,7 @@ import typing
import idna
from ._exceptions import InvalidURL
from ._httpx import normalize_path, quote
from ._httpx import find_ascii_non_printable, normalize_path, quote
MAX_URL_LENGTH = 65536
@ -221,12 +221,8 @@ def urlparse(url: str = "", **kwargs: str | None) -> ParseResult:
# If a URL includes any ASCII control characters including \t, \r, \n,
# then treat it as invalid.
if any(char.isascii() and not char.isprintable() for char in url):
char = next(char for char in url if char.isascii() and not char.isprintable())
idx = url.find(char)
error = (
f"Invalid non-printable ASCII character in URL, {char!r} at position {idx}."
)
if (idx := find_ascii_non_printable(url)) is not None:
error = f"Invalid non-printable ASCII character in URL, {url[idx]!r} at position {idx}."
raise InvalidURL(error)
# Some keyword arguments require special handling.