From: Amaury Forgeot d'Arc Date: Sun, 6 Jul 2008 21:34:39 +0000 (+0000) Subject: Issue839496: SimpleHTTPServer should open all files in binary mode. X-Git-Tag: v2.6b2~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0f7cddc308b297e6a1c2dd61503acea38401656f;p=thirdparty%2FPython%2Fcpython.git Issue839496: SimpleHTTPServer should open all files in binary mode. Forward-port of 38255 (2005/01/15!) This was already fixed in 2.4, but never merged into trunk... py3k is already right, thanks to the bytes/str distinction! Should be backported to 2.5. --- diff --git a/Lib/SimpleHTTPServer.py b/Lib/SimpleHTTPServer.py index e79a478d97e9..0110da018184 100644 --- a/Lib/SimpleHTTPServer.py +++ b/Lib/SimpleHTTPServer.py @@ -79,12 +79,11 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): else: return self.list_directory(path) ctype = self.guess_type(path) - if ctype.startswith('text/'): - mode = 'r' - else: - mode = 'rb' try: - f = open(path, mode) + # Always read in binary mode. Opening files in text mode may cause + # newline translations, making the actual size of the content + # transmitted *less* than the content-length! + f = open(path, 'rb') except IOError: self.send_error(404, "File not found") return None diff --git a/Misc/NEWS b/Misc/NEWS index f50459c77055..2dfa33ab51ff 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -36,6 +36,12 @@ Core and Builtins Library ------- +- Issue #839496: SimpleHTTPServer used to open text files in text mode. This is + both unnecessary (HTTP allows text content to be sent in several forms) and + wrong because the actual transmitted size could differ with the + content-length. The problem had been corrected in the 2.4 branch, but never + merged into trunk. + - Issue #2663: add filtering capability to shutil.copytree(). - Issue #1622: Correct interpretation of various ZIP header fields.