]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-100474: Fix handling of dirs named index.html in http.server (GH-100505)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sat, 24 Dec 2022 20:28:41 +0000 (12:28 -0800)
committerGitHub <noreply@github.com>
Sat, 24 Dec 2022 20:28:41 +0000 (15:28 -0500)
Co-authored-by: James Frost <git@frost.cx>
Lib/http/server.py
Lib/test/test_httpservers.py
Misc/NEWS.d/next/Library/2022-12-23-21-02-43.gh-issue-100474.gppA4U.rst [new file with mode: 0644]

index 058ee47ba10e62c1de9db8a601f6ccdaf1b64375..eef7cbb3ec7572d3c26a252e1e2a146f8d294186 100644 (file)
@@ -708,7 +708,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
                 return None
             for index in "index.html", "index.htm":
                 index = os.path.join(path, index)
-                if os.path.exists(index):
+                if os.path.isfile(index):
                     path = index
                     break
             else:
index ca078862cca6b97d99a5e5fea05f36b9e4000f6d..cbcf94136ac4ebc2596463061b119d606d9e9784 100644 (file)
@@ -489,6 +489,9 @@ class SimpleHTTPServerTestCase(BaseTestCase):
         self.check_status_and_reason(response, HTTPStatus.NOT_FOUND)
         response = self.request('/' + 'ThisDoesNotExist' + '/')
         self.check_status_and_reason(response, HTTPStatus.NOT_FOUND)
+        os.makedirs(os.path.join(self.tempdir, 'spam', 'index.html'))
+        response = self.request(self.base_url + '/spam/')
+        self.check_status_and_reason(response, HTTPStatus.OK)
 
         data = b"Dummy index file\r\n"
         with open(os.path.join(self.tempdir_name, 'index.html'), 'wb') as f:
diff --git a/Misc/NEWS.d/next/Library/2022-12-23-21-02-43.gh-issue-100474.gppA4U.rst b/Misc/NEWS.d/next/Library/2022-12-23-21-02-43.gh-issue-100474.gppA4U.rst
new file mode 100644 (file)
index 0000000..31abfb8
--- /dev/null
@@ -0,0 +1,2 @@
+:mod:`http.server` now checks that an index page is actually a regular file before trying
+to serve it.  This avoids issues with directories named ``index.html``.