aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/http.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2013-03-03 14:52:06 +1300
committerAldo Cortesi <aldo@nullcube.com>2013-03-03 14:52:06 +1300
commit2897ddfbee5ec3da72863cb8d5ee1370c9698f8a (patch)
tree5515a2c5d87bd81d38ab45ffc617af9617b6aa23 /netlib/http.py
parent1fe1a802adbef93b5b024a85d8dafb112ed652bb (diff)
downloadmitmproxy-2897ddfbee5ec3da72863cb8d5ee1370c9698f8a.tar.gz
mitmproxy-2897ddfbee5ec3da72863cb8d5ee1370c9698f8a.tar.bz2
mitmproxy-2897ddfbee5ec3da72863cb8d5ee1370c9698f8a.zip
Stricter error checking for http.parse_url
Diffstat (limited to 'netlib/http.py')
-rw-r--r--netlib/http.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/netlib/http.py b/netlib/http.py
index 10b6a402..c864f1de 100644
--- a/netlib/http.py
+++ b/netlib/http.py
@@ -15,6 +15,11 @@ class HttpErrorConnClosed(HttpError): pass
def parse_url(url):
"""
Returns a (scheme, host, port, path) tuple, or None on error.
+
+ Checks that:
+ port is an integer
+ host is a valid IDNA-encoded hostname
+ path is valid ASCII
"""
scheme, netloc, path, params, query, fragment = urlparse.urlparse(url)
if not scheme:
@@ -34,6 +39,14 @@ def parse_url(url):
path = urlparse.urlunparse(('', '', path, params, query, fragment))
if not path.startswith("/"):
path = "/" + path
+ try:
+ host.decode("idna")
+ except ValueError:
+ return None
+ try:
+ path.decode("ascii")
+ except ValueError:
+ return None
return scheme, host, port, path