diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2013-03-03 15:12:58 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2013-03-03 15:12:58 +1300 |
commit | b21a7da142625e3b47d712cd21cbd440eb48f490 (patch) | |
tree | 6bd660264b455d1435fe73cbaa42311792429a21 | |
parent | 7b9300743e879a8a2e35f5786b23a17261350ff9 (diff) | |
download | mitmproxy-b21a7da142625e3b47d712cd21cbd440eb48f490.tar.gz mitmproxy-b21a7da142625e3b47d712cd21cbd440eb48f490.tar.bz2 mitmproxy-b21a7da142625e3b47d712cd21cbd440eb48f490.zip |
parse_url: Handle invalid IPv6 addresses
-rw-r--r-- | netlib/http.py | 5 | ||||
-rw-r--r-- | test/test_http.py | 7 |
2 files changed, 9 insertions, 3 deletions
diff --git a/netlib/http.py b/netlib/http.py index 5628dd4d..2c9e69cb 100644 --- a/netlib/http.py +++ b/netlib/http.py @@ -21,7 +21,10 @@ def parse_url(url): host is a valid IDNA-encoded hostname with no null-bytes path is valid ASCII """ - scheme, netloc, path, params, query, fragment = urlparse.urlparse(url) + try: + scheme, netloc, path, params, query, fragment = urlparse.urlparse(url) + except ValueError: + return None if not scheme: return None if ':' in netloc: diff --git a/test/test_http.py b/test/test_http.py index 061aeb22..f7d861fd 100644 --- a/test/test_http.py +++ b/test/test_http.py @@ -294,11 +294,14 @@ def test_parse_url(): # Invalid IDNA assert not http.parse_url("http://\xfafoo") + # Invalid PATH assert not http.parse_url("http:/\xc6/localhost:56121") + # Null byte in host assert not http.parse_url("http://foo\0") + # Port out of range assert not http.parse_url("http://foo:999999") - - + # Invalid IPv6 URL - see http://www.ietf.org/rfc/rfc2732.txt + assert not http.parse_url('http://lo[calhost') def test_parse_http_basic_auth(): vals = ("basic", "foo", "bar") |