Message325519
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! |
|
Date |
User |
Action |
Args |
2018-09-17 10:23:18 | Michael.Felt | set | recipients:
+ Michael.Felt |
2018-09-17 10:23:18 | Michael.Felt | set | messageid: <1537179798.31.0.956365154283.issue34711@psf.upfronthosting.co.za> |
2018-09-17 10:23:18 | Michael.Felt | link | issue34711 messages |
2018-09-17 10:23:18 | Michael.Felt | create | |
|