From 0f7cddc308b297e6a1c2dd61503acea38401656f Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Sun, 6 Jul 2008 21:34:39 +0000 Subject: [PATCH] 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. --- Lib/SimpleHTTPServer.py | 9 ++++----- Misc/NEWS | 6 ++++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Lib/SimpleHTTPServer.py b/Lib/SimpleHTTPServer.py index e79a478d97..0110da0181 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 f50459c770..2dfa33ab51 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. -- 2.40.0