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.
This commit is contained in:
Amaury Forgeot d'Arc 2008-07-06 21:34:39 +00:00
parent aaca978103
commit 0f7cddc308
2 changed files with 10 additions and 5 deletions

View File

@ -79,12 +79,11 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
else: else:
return self.list_directory(path) return self.list_directory(path)
ctype = self.guess_type(path) ctype = self.guess_type(path)
if ctype.startswith('text/'):
mode = 'r'
else:
mode = 'rb'
try: 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: except IOError:
self.send_error(404, "File not found") self.send_error(404, "File not found")
return None return None

View File

@ -36,6 +36,12 @@ Core and Builtins
Library 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 #2663: add filtering capability to shutil.copytree().
- Issue #1622: Correct interpretation of various ZIP header fields. - Issue #1622: Correct interpretation of various ZIP header fields.