summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-01-06 17:17:04 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2011-01-06 17:17:04 (GMT)
commitb715fac819fadf56dc8ae0a7769e20ec053baa6d (patch)
tree63548aa14a5790075cdbceefd7a7522e86e2129d /Lib
parentf1397ad3999b9a12b47ecc17ba2c7b5bce0a9f2e (diff)
downloadcpython-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.py15
-rw-r--r--Lib/wsgiref/handlers.py4
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?