From b715fac819fadf56dc8ae0a7769e20ec053baa6d Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Thu, 6 Jan 2011 17:17:04 +0000 Subject: 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 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? diff --git a/Misc/ACKS b/Misc/ACKS index 43abe8d..fbc9326 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -261,6 +261,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 3fc052a..bdac346 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -30,6 +30,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 #10492: bdb.Bdb.run() only traces the execution of the code, not the compilation (if the input is a string). -- cgit v0.12