Repository navigation
Non-ASCII characters in os.environ cause silent failures in test_httpservers #88813
Description
Activity
#67826 introduced a new test for Accept: headers in CGI HTTP servers. This test serializes all of
os.environon the server side. For non-UTF8 locales this can fail for some Unicode characters found in environment variables.This started failing this week on Azure Pipelines with their rollout of a new Windows 2019 image version that included a "BUILD_SOURCEVERSIONAUTHOR" env variable. For me specifically it includes a leading Unicode character so all my PRs started failing on Azure Pipelines Windows 2019 alone.
The result was truncated output from the CGI HTTP server, like:
======================================================================
FAIL: test_accept (test.test_httpservers.CGIHTTPServerTestCase) [OrderedDict([('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8')])]
----------------------------------------------------------------------Traceback (most recent call last): File "D:\a\1\s\lib\test\test_httpservers.py", line 860, in test_accept self.assertIn(expected.encode('ascii'), res.read()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AssertionError: b"'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'" not found in b''
The root cause is that the CGI script in question (
cgi_file6in test_httpservers.py) is crashing on server-side reaching theprint(repr(os.environ))line. However, this exception isn't visible on the client side where the test is running. The only visible issue is truncated output.I suggest adding ENSURE_UNICODE_WORKS=Łukasz to the testing env so that this never regresses.
- added3.9 (EOL)end of lifeend of life3.10 (EOL)end of lifeend of life3.11only security fixesonly security fixestype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
on Jul 15, 2021 It introduced a regression. See #91904.
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields: