diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2011-01-06 17:17:04 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2011-01-06 17:17:04 (GMT) |
commit | b715fac819fadf56dc8ae0a7769e20ec053baa6d (patch) | |
tree | 63548aa14a5790075cdbceefd7a7522e86e2129d /Lib | |
parent | f1397ad3999b9a12b47ecc17ba2c7b5bce0a9f2e (diff) | |
download | cpython-b715fac819fadf56dc8ae0a7769e20ec053baa6d.zip cpython-b715fac819fadf56dc8ae0a7769e20ec053baa6d.tar.gz cpython-b715fac819fadf56dc8ae0a7769e20ec053baa6d.tar.bz2 |
Issue #3839: wsgiref should not override a Content-Length header set by
the application. Initial patch by Clovis Fabricio.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_wsgiref.py | 15 | ||||
-rw-r--r-- | Lib/wsgiref/handlers.py | 4 |
2 files changed, 14 insertions, 5 deletions
diff --git a/Lib/test/test_wsgiref.py b/Lib/test/test_wsgiref.py index b8cf635..a08f66b 100644 --- a/Lib/test/test_wsgiref.py +++ b/Lib/test/test_wsgiref.py @@ -520,6 +520,11 @@ class HandlerTests(TestCase): s('200 OK',[]) return ['\u0442\u0435\u0441\u0442'.encode("utf-8")] + def trivial_app4(e,s): + # Simulate a response to a HEAD request + s('200 OK',[('Content-Length', '12345')]) + return [] + h = TestHandler() h.run(trivial_app1) self.assertEqual(h.stdout.getvalue(), @@ -543,10 +548,12 @@ class HandlerTests(TestCase): b'\r\n' b'\xd1\x82\xd0\xb5\xd1\x81\xd1\x82') - - - - + h = TestHandler() + h.run(trivial_app4) + self.assertEqual(h.stdout.getvalue(), + b'Status: 200 OK\r\n' + b'Content-Length: 12345\r\n' + b'\r\n') def testBasicErrorOutput(self): diff --git a/Lib/wsgiref/handlers.py b/Lib/wsgiref/handlers.py index 6d6f80f..67064a6 100644 --- a/Lib/wsgiref/handlers.py +++ b/Lib/wsgiref/handlers.py @@ -302,7 +302,9 @@ class BaseHandler: def finish_content(self): """Ensure headers and content have both been sent""" if not self.headers_sent: - self.headers['Content-Length'] = "0" + # Only zero Content-Length if not set by the application (so + # that HEAD requests can be satisfied properly, see #3839) + self.headers.setdefault('Content-Length', "0") self.send_headers() else: pass # XXX check if content-length was too short? |