From d4fac04fdee9947cac4d82407ba7d5f3b4bf8ee9 Mon Sep 17 00:00:00 2001 From: Senthil Kumaran Date: Fri, 13 Sep 2013 00:18:55 -0700 Subject: [PATCH] Fix SimpleHTTPServer's request handling case on trailing '/'. Patch contributed by Vajrasky Kok. Addresses Issue #17324 --- Lib/SimpleHTTPServer.py | 4 ++++ Lib/test/test_httpservers.py | 3 +++ Misc/NEWS | 3 +++ 3 files changed, 10 insertions(+) diff --git a/Lib/SimpleHTTPServer.py b/Lib/SimpleHTTPServer.py index 3e0334da3b..1996f4d29b 100644 --- a/Lib/SimpleHTTPServer.py +++ b/Lib/SimpleHTTPServer.py @@ -149,6 +149,8 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): # abandon query parameters path = path.split('?',1)[0] path = path.split('#',1)[0] + # Don't forget explicit trailing slash when normalizing. Issue17324 + trailing_slash = True if path.rstrip().endswith('/') else False path = posixpath.normpath(urllib.unquote(path)) words = path.split('/') words = filter(None, words) @@ -158,6 +160,8 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): head, word = os.path.split(word) if word in (os.curdir, os.pardir): continue path = os.path.join(path, word) + if trailing_slash: + path += '/' return path def copyfile(self, source, outputfile): diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 5dcedc0fe8..3f1436004d 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -313,6 +313,9 @@ class SimpleHTTPServerTestCase(BaseTestCase): #constructs the path relative to the root directory of the HTTPServer response = self.request(self.tempdir_name + '/test') self.check_status_and_reason(response, 200, data=self.data) + # check for trailing "/" which should return 404. See Issue17324 + response = self.request(self.tempdir_name + '/test/') + self.check_status_and_reason(response, 404) response = self.request(self.tempdir_name + '/') self.check_status_and_reason(response, 200) response = self.request(self.tempdir_name) diff --git a/Misc/NEWS b/Misc/NEWS index ea74d71bd9..e025df630d 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -32,6 +32,9 @@ Core and Builtins Library ------- +- Issue #17324: Fix http.server's request handling case on trailing '/'. Patch + contributed by Vajrasky Kok. + - Issue #18784: The uuid module no more attempts to load libc via ctypes.CDLL, if all necessary functions are already found in libuuid. Patch by Evgeny Sologubov. -- 2.50.1