mirror of
https://github.com/github/spec-kit.git
synced 2026-08-03 06:26:30 +08:00
fix(auth): return no matches, not raw ValueError, for a malformed URL (#3437)
find_entries_for_url did (urlparse(url).hostname or "").lower() unguarded. a malformed authority (e.g. an unterminated ipv6 bracket "https://[::1") makes urlparse/hostname raise ValueError, so instead of the empty list the function already returns for a host-less url, a raw ValueError leaked out of the shared http client (build_request / open_url call this before any url validation). no auth entry can match such a url, so treat it like the host-less case and return no matches. added a regression test over an unterminated bracket and a bracketed non-ip host; confirmed it fails on the pre-fix code.
This commit is contained in:
@@ -196,7 +196,15 @@ def find_entries_for_url(
|
||||
url: str, entries: list[AuthConfigEntry]
|
||||
) -> list[AuthConfigEntry]:
|
||||
"""Return entries whose ``hosts`` match the hostname of *url*."""
|
||||
hostname = (urlparse(url).hostname or "").lower()
|
||||
# A malformed authority (e.g. an unterminated IPv6 bracket "https://[::1")
|
||||
# makes urlparse/hostname raise ValueError. Treat that the same as a
|
||||
# host-less URL: no entry can match, so return no matches rather than
|
||||
# leaking a raw ValueError out of the shared HTTP client (build_request /
|
||||
# open_url call this before any URL validation).
|
||||
try:
|
||||
hostname = (urlparse(url).hostname or "").lower()
|
||||
except ValueError:
|
||||
return []
|
||||
if not hostname:
|
||||
return []
|
||||
return [
|
||||
|
||||
Reference in New Issue
Block a user