New submission from Michael Felt <aixto...@felt.demon.nl>:
Going back to issue17234 - there has been a test to check that a URL with a trailing slash reports 404 status. On AIX a trailing-slash is ignored - if the rest of the path is a valid filename. At a very low-level, in Modules/_io/fileio.c the code could be adjusted to always look for a trailing slash, and if AIX considers the name to be a file (S_ISREG(mode)) then this could be promoted to an error. just as it does for "posix" opens directories with trailing slashes (and fileio.c deals with that in a Python way). A quick fix is to skip the test issue17324 introduced; A medium fix would be to modify Lib/http/server.py to verify that a URL with trailing slash is a directory, and otherwise raise an exception; A deeper fix would be to add "a hack" specific to AIX, and raise (emulate) an OSError when there is a trailing slash and the pathname is a file. In short, the simple resolution - without impacting core in any way is: diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index cc829a522b..31be9b4479 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -13,6 +13,7 @@ import sys import re import base64 import ntpath +import platform import shutil import email.message import email.utils @@ -29,6 +30,7 @@ from io import BytesIO import unittest from test import support +AIX = platform.system() == 'AIX' class NoLogRequestHandler: def log_message(self, *args): @@ -417,9 +419,11 @@ class SimpleHTTPServerTestCase(BaseTestCase): #constructs the path relative to the root directory of the HTTPServer response = self.request(self.base_url + '/test') self.check_status_and_reason(response, HTTPStatus.OK, data=self.data) - # check for trailing "/" which should return 404. See Issue17324 - response = self.request(self.base_url + '/test/') - self.check_status_and_reason(response, HTTPStatus.NOT_FOUND) + # AIX open() will open a filename with a trailing slash - as a file + if not AIX: + # check for trailing "/" which should return 404. See Issue17324 + response = self.request(self.base_url + '/test/') + self.check_status_and_reason(response, HTTPStatus.NOT_FOUND) response = self.request(self.base_url + '/') self.check_status_and_reason(response, HTTPStatus.OK) response = self.request(self.base_url) @@ -519,8 +523,9 @@ class SimpleHTTPServerTestCase(BaseTestCase): def test_path_without_leading_slash(self): response = self.request(self.tempdir_name + '/test') self.check_status_and_reason(response, HTTPStatus.OK, data=self.data) - response = self.request(self.tempdir_name + '/test/') - self.check_status_and_reason(response, HTTPStatus.NOT_FOUND) + if not AIX: + response = self.request(self.tempdir_name + '/test/') + self.check_status_and_reason(response, HTTPStatus.NOT_FOUND) response = self.request(self.tempdir_name + '/') self.check_status_and_reason(response, HTTPStatus.OK) response = self.request(self.tempdir_name) Comments! ---------- components: Tests messages: 325519 nosy: Michael.Felt priority: normal severity: normal status: open title: Fix test_httpservers on AIX type: behavior versions: Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue34711> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com