diff -r 178f9042af81 Lib/http/server.py --- a/Lib/http/server.py Sun Sep 23 11:11:07 2012 +0200 +++ b/Lib/http/server.py Fri Sep 28 17:16:04 2012 +0200 @@ -691,8 +691,13 @@ """ path = self.translate_path(self.path) - f = None - if os.path.isdir(path): + try: + isdir = os.path.isdir(path) + except TypeError: + # client sent invalid bytes, see issue #16083 + self.send_error(400) + return + if isdir: if not self.path.endswith('/'): # redirect browser - doing basically what apache does self.send_response(301) diff -r 178f9042af81 Lib/test/test_httpservers.py --- a/Lib/test/test_httpservers.py Sun Sep 23 11:11:07 2012 +0200 +++ b/Lib/test/test_httpservers.py Fri Sep 28 17:16:04 2012 +0200 @@ -284,6 +284,9 @@ self.check_status_and_reason(response, 501) response = self.request('/', method='GETs') self.check_status_and_reason(response, 501) + # send NUL byte. See issue16083 + response = self.request('/\00', method='GET') + self.check_status_and_reason(response, 400) cgi_file1 = """\