aboutsummaryrefslogtreecommitdiffstats
path: root/netlib
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2016-07-21 10:38:37 +1200
committerAldo Cortesi <aldo@nullcube.com>2016-07-21 10:38:37 +1200
commit02acfb1242d126e17a295ff8078ef9a73201c7ca (patch)
tree0f5df1008c792407de6b75ab4edb4bd9e04616ad /netlib
parentb27db1fc812b5b9935599caf5d0a2cdfe34d7322 (diff)
downloadmitmproxy-02acfb1242d126e17a295ff8078ef9a73201c7ca.tar.gz
mitmproxy-02acfb1242d126e17a295ff8078ef9a73201c7ca.tar.bz2
mitmproxy-02acfb1242d126e17a295ff8078ef9a73201c7ca.zip
Fix netlib.utils.is_valid_host
- Don't crash when passed an empty string. This translated into an actual core crash, discovered while fuzzing with afl. - Taking a slice of length one out of bytes returns an integer, so the check for trailing period in this function never worked on Python3. - Add unit tests.
Diffstat (limited to 'netlib')
-rw-r--r--netlib/utils.py4
1 files changed, 2 insertions, 2 deletions
diff --git a/netlib/utils.py b/netlib/utils.py
index 9eebf22c..0deb7c82 100644
--- a/netlib/utils.py
+++ b/netlib/utils.py
@@ -82,7 +82,7 @@ _label_valid = re.compile(b"(?!-)[A-Z\d-]{1,63}(?<!-)$", re.IGNORECASE)
def is_valid_host(host):
# type: (bytes) -> bool
"""
- Checks if a hostname is valid.
+ Checks if a hostname is valid.
"""
try:
host.decode("idna")
@@ -90,7 +90,7 @@ def is_valid_host(host):
return False
if len(host) > 255:
return False
- if host[-1] == b".":
+ if host and host[-1:] == b".":
host = host[:-1]
return all(_label_valid.match(x) for x in host.split(b"."))