# HG changeset patch # User Manuel Jacob # Date 1694179983 -7200 # Node ID 04bfcb41674503405a781de444034716843431f9 # Parent 615569b2785ed9e27107611c75a82ff5e338d787 hgweb: pass strings in WSGI environment correctly from wsgicgi According to PEP 3333, the strings in the WSGI environment must be translatable to bytes using the ISO-8859-1 codec. diff -r 615569b2785e -r 04bfcb416745 mercurial/hgweb/wsgicgi.py --- a/mercurial/hgweb/wsgicgi.py Wed Sep 06 18:11:12 2023 +0200 +++ b/mercurial/hgweb/wsgicgi.py Fri Sep 08 15:33:03 2023 +0200 @@ -9,10 +9,8 @@ # http://www.python.org/dev/peps/pep-0333/#the-server-gateway-side -import os - from ..pycompat import getattr -from .. import pycompat +from .. import encoding, pycompat from ..utils import procutil @@ -23,7 +21,10 @@ procutil.setbinary(procutil.stdin) procutil.setbinary(procutil.stdout) - environ = dict(os.environ.items()) # re-exports + environ = { + k.decode('iso8859-1'): v.decode('iso8859-1') + for k, v in encoding.environ.items() + } # re-exports environ.setdefault('PATH_INFO', '') if environ.get('SERVER_SOFTWARE', '').startswith('Microsoft-IIS'): # IIS includes script_name in PATH_INFO diff -r 615569b2785e -r 04bfcb416745 tests/test-wsgicgi.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-wsgicgi.t Fri Sep 08 15:33:03 2023 +0200 @@ -0,0 +1,18 @@ + $ hg init test + $ cat >hgweb.cgi < #!$PYTHON + > from mercurial import demandimport; demandimport.enable() + > from mercurial.hgweb import hgweb + > from mercurial.hgweb import wsgicgi + > application = hgweb(b"test", b"Empty test repository") + > wsgicgi.launch(application) + > HGWEB + $ chmod 755 hgweb.cgi + +Check that non-ASCII bytes roundtrip correctly. + + $ . "$TESTDIR/cgienv" + $ PATH_INFO="/rev/$(python -c 'import sys; sys.stdout.buffer.write(b"\xe2\x80\x94")')"; export PATH_INFO + $ QUERY_STRING="style=raw"; export QUERY_STRING + $ "$PYTHON" ./hgweb.cgi | grep error + error: unknown revision '\xe2\x80\x94' (esc)