]> granicus.if.org Git - python/commitdiff
#14983: always add a line end after a MIME boundary marker.
authorR David Murray <rdmurray@bitdance.com>
Sat, 8 Feb 2014 22:54:56 +0000 (17:54 -0500)
committerR David Murray <rdmurray@bitdance.com>
Sat, 8 Feb 2014 22:54:56 +0000 (17:54 -0500)
This is more RFC compliant (see issue) and fixes a problem with
signature verifiers rejecting the part when signed.  There is some
amount of backward compatibility concern here since it changes
the output, but the RFC issue coupled with fixing the problem
with signature verifiers seems worth the small risk of breaking
code that depends on the current incorrect output.

Lib/email/generator.py
Lib/test/test_email/data/msg_02.txt
Lib/test/test_email/test_email.py
Misc/NEWS

index 07a97c7e27bbfc700f41846acbdd7fa7d5783190..e4a86d49d838842724f78015280564da0be7dd2c 100644 (file)
@@ -299,9 +299,8 @@ class Generator:
             # body-part
             self._fp.write(body_part)
         # close-delimiter transport-padding
-        self.write(self._NL + '--' + boundary + '--')
+        self.write(self._NL + '--' + boundary + '--' + self._NL)
         if msg.epilogue is not None:
-            self.write(self._NL)
             if self._mangle_from_:
                 epilogue = fcre.sub('>From ', msg.epilogue)
             else:
index 43f248038a8e362fac7c1b5dd8017671626b8511..5d0a7e16c8251f3de3c980ed453da5e26bb6be2d 100644 (file)
@@ -119,6 +119,7 @@ hello
 
 
 --__--__----
+
 --192.168.1.2.889.32614.987812255.500.21814
 Content-type: text/plain; charset=us-ascii
 Content-description: Digest Footer
index 73ec2a6d0bc932faaeed8b022e7fce2dece5a026..51fe756df7995e276ecebce509c57414671226c3 100644 (file)
@@ -1711,7 +1711,8 @@ From: bperson@dom.ain
 
 --BOUNDARY
 
---BOUNDARY--''')
+--BOUNDARY--
+''')
 
     def test_no_parts_in_a_multipart_with_empty_epilogue(self):
         outer = MIMEBase('multipart', 'mixed')
@@ -1756,7 +1757,8 @@ MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 
 hello world
---BOUNDARY--''')
+--BOUNDARY--
+''')
 
     def test_seq_parts_in_a_multipart_with_empty_preamble(self):
         eq = self.ndiffAssertEqual
@@ -1782,7 +1784,8 @@ MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 
 hello world
---BOUNDARY--''')
+--BOUNDARY--
+''')
 
 
     def test_seq_parts_in_a_multipart_with_none_preamble(self):
@@ -1808,7 +1811,8 @@ MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 
 hello world
---BOUNDARY--''')
+--BOUNDARY--
+''')
 
 
     def test_seq_parts_in_a_multipart_with_none_epilogue(self):
@@ -1834,7 +1838,8 @@ MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 
 hello world
---BOUNDARY--''')
+--BOUNDARY--
+''')
 
 
     def test_seq_parts_in_a_multipart_with_empty_epilogue(self):
index fd89776f31323caa8095e66a4c9c3ef8c84a8a69..1ec77a44ca0363e2bded734a2eb278d9572410fd 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -48,6 +48,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #14983: email.generator now always adds a line end after each MIME
+  boundary marker, instead of doing so only when there is an epilogue.  This
+  fixes an RFC compliance bug and solves an issue with signed MIME parts.
+
 - Issue #20540: Fix a performance regression (vs. Python 3.2) when layering
   a multiprocessing Connection over a TCP socket.  For small payloads, Nagle's
   algorithm would introduce idle delays before the entire transmission of a