From 59bf738874d2582ca37e49c162a18ef20442177e Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Thu, 6 Jan 2011 17:18:32 +0000 Subject: 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. ........ --- Lib/test/test_wsgiref.py | 15 +++++++++++---- Lib/wsgiref/handlers.py | 4 +++- Misc/ACKS | 1 + Misc/NEWS | 3 +++ 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. -- cgit v0.12