diff --git a/aurweb/util.py b/aurweb/util.py index 0eb2671e..bda743fd 100644 --- a/aurweb/util.py +++ b/aurweb/util.py @@ -63,7 +63,10 @@ def valid_email(email): def valid_homepage(homepage): - parts = urlparse(homepage) + try: + parts = urlparse(homepage) + except ValueError: + return False return parts.scheme in ("http", "https") and bool(parts.netloc) diff --git a/test/test_util.py b/test/test_util.py index 41876fbf..91a0f475 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -85,3 +85,12 @@ async def test_error_or_result(): response = await util.error_or_result(good_route, Request()) assert response.status_code == HTTPStatus.OK + + +def test_valid_homepage(): + assert util.valid_homepage("http://google.com") + assert util.valid_homepage("https://google.com") + assert not util.valid_homepage("http://[google.com/broken-ipv6") + assert not util.valid_homepage("https://[google.com/broken-ipv6") + + assert not util.valid_homepage("gopher://gopher.hprc.utoronto.ca/")