summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-01-06 17:19:05 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2011-01-06 17:19:05 (GMT)
commit77c1b382b76ba90acc570a4194521d6bd4425bac (patch)
treefad679c28e1bbdabf36efb783b6bbe427c71fc9e
parent9f41bb325b4f5db695d1ea25649d1fd1e809b2bf (diff)
downloadcpython-77c1b382b76ba90acc570a4194521d6bd4425bac.zip
cpython-77c1b382b76ba90acc570a4194521d6bd4425bac.tar.gz
cpython-77c1b382b76ba90acc570a4194521d6bd4425bac.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. ........
-rw-r--r--Lib/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 5866efc..45ca620 100644
--- a/Lib/test/test_wsgiref.py
+++ b/Lib/test/test_wsgiref.py
@@ -481,6 +481,11 @@ class HandlerTests(TestCase):
s('200 OK',[])(e['wsgi.url_scheme'])
return []
+ 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(),
@@ -497,10 +502,12 @@ class HandlerTests(TestCase):
"http")
-
-
-
-
+ 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 a5f7109..ae1e8cc 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 fbe650d..aca3873 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -242,6 +242,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 3d19974..1ac5985 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -25,6 +25,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 #10806, issue #9905: Fix subprocess pipes when some of the standard
file descriptors (0, 1, 2) are closed in the parent process. Initial
patch by Ross Lagerwall.