Commit 2cfae9b0 authored by R David Murray's avatar R David Murray

#14983: always add a line end after a MIME boundary marker.

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.
parent 4ade2d25
......@@ -231,9 +231,8 @@ class Generator:
# body-part
self._fp.write(body_part)
# close-delimiter transport-padding
self._fp.write('\n--' + boundary + '--')
self._fp.write('\n--' + boundary + '--' + NL)
if msg.epilogue is not None:
print >> self._fp
if self._mangle_from_:
epilogue = fcre.sub('>From ', msg.epilogue)
else:
......
......@@ -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
......
......@@ -1206,7 +1206,8 @@ From: bperson@dom.ain
--BOUNDARY
--BOUNDARY--''')
--BOUNDARY--
''')
def test_no_parts_in_a_multipart_with_empty_epilogue(self):
outer = MIMEBase('multipart', 'mixed')
......@@ -1251,7 +1252,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
......@@ -1277,7 +1279,8 @@ MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
hello world
--BOUNDARY--''')
--BOUNDARY--
''')
def test_seq_parts_in_a_multipart_with_none_preamble(self):
......@@ -1303,7 +1306,8 @@ MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
hello world
--BOUNDARY--''')
--BOUNDARY--
''')
def test_seq_parts_in_a_multipart_with_none_epilogue(self):
......@@ -1329,7 +1333,8 @@ MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
hello world
--BOUNDARY--''')
--BOUNDARY--
''')
def test_seq_parts_in_a_multipart_with_empty_epilogue(self):
......
......@@ -1146,7 +1146,8 @@ From: bperson@dom.ain
--BOUNDARY
--BOUNDARY--''')
--BOUNDARY--
''')
def test_no_parts_in_a_multipart_with_empty_epilogue(self):
outer = MIMEBase('multipart', 'mixed')
......@@ -1191,7 +1192,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
......@@ -1217,7 +1219,8 @@ MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
hello world
--BOUNDARY--''')
--BOUNDARY--
''')
def test_seq_parts_in_a_multipart_with_none_preamble(self):
......@@ -1243,7 +1246,8 @@ MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
hello world
--BOUNDARY--''')
--BOUNDARY--
''')
def test_seq_parts_in_a_multipart_with_none_epilogue(self):
......@@ -1269,7 +1273,8 @@ MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
hello world
--BOUNDARY--''')
--BOUNDARY--
''')
def test_seq_parts_in_a_multipart_with_empty_epilogue(self):
......
......@@ -42,6 +42,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 #20013: Some imap servers disconnect if the current mailbox is
deleted, and imaplib did not handle that case gracefully. Now it
handles the 'bye' correctly.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment