From 4ce5d99b24313bc2fc635f1f9c9d4aaf3ea4b8a7 Mon Sep 17 00:00:00 2001 From: Jesko Date: Wed, 8 Aug 2018 16:55:43 +0200 Subject: [PATCH] match minimizes ipv6 urls --- qutebrowser/utils/urlmatch.py | 8 ++++++++ tests/unit/utils/test_urlmatch.py | 3 +++ 2 files changed, 11 insertions(+) diff --git a/qutebrowser/utils/urlmatch.py b/qutebrowser/utils/urlmatch.py index 5d9afc13e..f8e06fb06 100644 --- a/qutebrowser/utils/urlmatch.py +++ b/qutebrowser/utils/urlmatch.py @@ -30,6 +30,7 @@ import fnmatch import urllib.parse from qutebrowser.utils import utils, qtutils +from PyQt5.QtCore import QUrl class ParseError(Exception): @@ -177,6 +178,13 @@ class UrlPattern: assert self._host is None return + if not utils.raises(ValueError, ipaddress.IPv6Address, parsed.netloc[1:-1]): + # Using QUrl parsing to minimize ipv6 addresses + url = QUrl() + url.setHost(parsed.hostname) + self._host = url.host() + return + # FIXME what about multiple dots? host_parts = parsed.hostname.rstrip('.').split('.') if host_parts[0] == '*': diff --git a/tests/unit/utils/test_urlmatch.py b/tests/unit/utils/test_urlmatch.py index 16ab0acc9..1dadc2cab 100644 --- a/tests/unit/utils/test_urlmatch.py +++ b/tests/unit/utils/test_urlmatch.py @@ -257,6 +257,9 @@ class TestMatchIpAddresses: ("http://127.0.0.1/*", "127.0.0.1", False), ("http://*.0.0.1/*", "0.0.1", True), ("http://[::1]/*", "::1", False), + ("http://[0::1]/*", "::1", False), + ("http://[::01]/*", "::1", False), + ("http://[0:0:0:0:20::1]/*", "::20:0:0:1", False), ]) def test_attrs(self, pattern, host, match_subdomains): up = urlmatch.UrlPattern(pattern)