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 e79a478..0110da0 100644
--- a/Lib/SimpleHTTPServer.py
+++ b/Lib/SimpleHTTPServer.py
@@ -79,12 +79,11 @@
             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 f50459c..2dfa33a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -36,6 +36,12 @@
 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.