Opened 3 years ago
Closed 3 years ago
#13575 closed defect (fixed)
Blank page in CGI mode
| Reported by: | Owned by: | Jun Omae | |
|---|---|---|---|
| Priority: | normal | Milestone: | 1.6 |
| Component: | web frontend | Version: | 1.5.4 |
| Severity: | major | Keywords: | cgi |
| Cc: | Branch: | ||
| Release Notes: |
Write data as binary to stdout in CGI frontend. |
||
| API Changes: | |||
| Internal Changes: | |||
Description
I've upgraded a Trac instance deployed on Apache in CGI mode. The database upgrade went well, testing in standalone mode looked ok, but with Apache I just got a blank page, no HTTP error, no stacktrace, and nothing in the Apache error.log in debug mode.
I tracked down the issue to cgi_frontend.py where an exception occurs (but isn't propagated for some reason) when calling sys.stdout.write(data):
write() argument must be str, not bytes
Converting the bytes to string fixed the issue:
sys.stdout.write(data.decode('UTF-8'))
Attachments (0)
Change History (4)
comment:1 by , 3 years ago
comment:3 by , 3 years ago
| Keywords: | cgi added |
|---|---|
| Milestone: | → 1.6 |
| Owner: | set to |
| Status: | new → assigned |
Thanks for the report. Reproduced it by the following:
$ TRAC_ENV=/var/trac/1.5-sqlite \
> SERVER_PROTOCOL=HTTP/1.0
> SERVER_PORT=3000 \
> SERVER_NAME=127.0.0.1 \
> REQUEST_METHOD=GET \
> PATH_INFO=/chrome/common/trac.ico \
> /venv/trac/1.5.4/bin/python -m trac.web.cgi_frontend
Status: 200 Ok
Content-Type: image/x-icon
Content-Length: 3638
Last-Modified: Mon, 20 Feb 2023 02:34:22 GMT
Set-Cookie: trac_session=da00d9c1ae3bde3ef228a048; expires=Wed, 07 Jun 2023 10:09:00 GMT; HttpOnly; Path=/
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/venv/trac/1.5.4/lib/python3.9/site-packages/trac/web/cgi_frontend.py", line 71, in run
gateway.run(dispatch_request)
File "/venv/trac/1.5.4/lib/python3.9/site-packages/trac/web/wsgi.py", line 125, in run
self._write(chunk)
File "/venv/trac/1.5.4/lib/python3.9/site-packages/trac/web/cgi_frontend.py", line 49, in _write
sys.stdout.write(data)
TypeError: write() argument must be str, not bytes
comment:4 by , 3 years ago
| Release Notes: | modified (diff) |
|---|---|
| Resolution: | → fixed |
| Status: | assigned → closed |
Fixed in [17686].



Actually it fixed only the rendering of the HTML pages, it broke the images.