Skip to content

Reject raw ASCII control characters in URLs - #518

Open
Apeksha9389 wants to merge 1 commit into
python-validators:masterfrom
Apeksha9389:fix/url-control-characters
Open

Apeksha9389 wants to merge 1 commit into
python-validators:masterfrom
Apeksha9389:fix/url-control-characters

Conversation

@Apeksha9389

Copy link
Copy Markdown

URLs containing raw NUL or DEL characters currently validate successfully, for example url("https://example.com/?q=\x00"). Leading controls can also be discarded by urlsplit before validation sees them. Reject raw ASCII controls before parsing, alongside the existing whitespace rejection. Percent-encoded control bytes remain valid URL data.

This follows the RFC 3986 character grammar. The related open #514 changes uri(), while this PR covers the separate url() entry point and its parsing path.

The added tests cover all 33 ASCII control characters in five URL positions and ten percent-encoded positive controls. Seventy of these regressions fail on master. Full tests including doctests pass on Python 3.12 (1,346 passed). Ruff lint/format and strict Pyright pass with zero diagnostics. Other Python versions are left to CI.

Prepared with AI assistance; reproduced and tested locally.

@Apeksha9389

Copy link
Copy Markdown
Author

Could a maintainer approve the pending CI runs and review this PR for merging? Local tests, doctests, Ruff, and strict Pyright all pass. Thank you.

This branch has not been deployed

No deployments
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.

1 participant