summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-01-06 17:18:32 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2011-01-06 17:18:32 (GMT)
commit59bf738874d2582ca37e49c162a18ef20442177e (patch)
treefbb41d7a287694932f1e16338399ed36178924ff
parent6e7d711d2a54087051e215f85115528a346c25d1 (diff)
downloadcpython-59bf738874d2582ca37e49c162a18ef20442177e.zip
cpython-59bf738874d2582ca37e49c162a18ef20442177e.tar.gz
cpython-59bf738874d2582ca37e49c162a18ef20442177e.tar.bz2
Merged revisions 87797 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r87797 | antoine.pitrou | 2011-01-06 18:17:04 +0100 (jeu., 06 janv. 2011) | 4 lines Issue #3839: wsgiref should not override a Content-Length header set by the application. Initial patch by Clovis Fabricio. ........
-rwxr-xr-xLib/test/test_wsgiref.py15
-rw-r--r--Lib/wsgiref/handlers.py4
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
4 files changed, 18 insertions, 5 deletions
diff --git a/Lib/test/test_wsgiref.py b/Lib/test/test_wsgiref.py
index ef38d77..3450163 100755
--- a/Lib/test/test_wsgiref.py
+++ b/Lib/test/test_wsgiref.py
@@ -543,6 +543,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(),
@@ -566,10 +571,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 8a78eec..4a77137 100644
--- a/Lib/wsgiref/handlers.py
+++ b/Lib/wsgiref/handlers.py
@@ -240,7 +240,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?
diff --git a/Misc/ACKS b/Misc/ACKS
index ef5fce8..ae2d3a5 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -237,6 +237,7 @@ Paul Everitt
David Everly
Greg Ewing
Martijn Faassen
+Clovis Fabricio
Andreas Faerber
Bill Fancher
Troy J. Farrell
diff --git a/Misc/NEWS b/Misc/NEWS
index 1470351..a7b49de 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -27,6 +27,9 @@ Core and Builtins
Library
-------
+- Issue #3839: wsgiref should not override a Content-Length header set by
+ the application. Initial patch by Clovis Fabricio.
+
- Issue #10790: email.header.Header.append's charset logic now works correctly
for charsets whose output codec is different from its input codec.