]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-100474: Fix handling of dirs named index.html in http.server (GH-100475)
authorJames Frost <git@frost.cx>
Sat, 24 Dec 2022 18:28:59 +0000 (18:28 +0000)
committerGitHub <noreply@github.com>
Sat, 24 Dec 2022 18:28:59 +0000 (10:28 -0800)
If you had a directory called index.html or index.htm within a directory, it would cause http.server to return a 404 Not Found error instead of the directory listing. This came about due to not checking that the index was a regular file.

I have also added a test case for this situation.

Automerge-Triggered-By: GH:merwok
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 8acabff605e79528004e58883186918d975b1b6e..221c8be4ae4b8f4f1672f9391de6aa0392ffd302 100644 (file)
@@ -711,7 +711,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
                 return None
             for index in self.index_pages:
                 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``.