Skip to content
Closed
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Lib/test/test_urlparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -686,6 +686,13 @@ def test_attributes_bad_scheme(self):
else:
self.assertEqual(p.scheme, "")

def test_attributes_bad_scheme_CVE_2023_24329(self):
"""Check handling of invalid schemes that starts with blank characters."""
for parse in (urllib.parse.urlsplit, urllib.parse.urlparse):
url = " https://www.example.net"
p = parse(url)
self.assertEqual(p.scheme, "https")

def test_attributes_without_netloc(self):
# This example is straight from RFC 3261. It looks like it
# should allow the username, hostname, and port to be filled
Expand Down
1 change: 1 addition & 0 deletions Lib/urllib/parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,7 @@ def urlsplit(url, scheme='', allow_fragments=True):
Note that % escapes are not expanded.
"""

url = url.lstrip()
url, scheme, _coerce_result = _coerce_args(url, scheme)

for b in _UNSAFE_URL_BYTES_TO_REMOVE:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fix CVE-2023-24329