mirror of https://github.com/python/cpython
Merged revisions 77517,77525 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r77517 | r.david.murray | 2010-01-16 00:15:17 -0500 (Sat, 16 Jan 2010) | 6 lines Issue #1670765: Prevent email.generator.Generator from re-wrapping headers in multipart/signed MIME parts, which fixes one of the sources of invalid modifications to such parts by Generator. Patch and tests by Martin von Gagern. ........ r77525 | r.david.murray | 2010-01-16 11:08:32 -0500 (Sat, 16 Jan 2010) | 2 lines Fix issue number in comment. ........
This commit is contained in:
parent
b9ba2bb685
commit
3cc6191ecd
|
@ -235,6 +235,17 @@ class Generator:
|
|||
print >> self._fp
|
||||
self._fp.write(msg.epilogue)
|
||||
|
||||
def _handle_multipart_signed(self, msg):
|
||||
# The contents of signed parts has to stay unmodified in order to keep
|
||||
# the signature intact per RFC1847 2.1, so we disable header wrapping.
|
||||
# RDM: This isn't enough to completely preserve the part, but it helps.
|
||||
old_maxheaderlen = self._maxheaderlen
|
||||
try:
|
||||
self._maxheaderlen = 0
|
||||
self._handle_multipart(msg)
|
||||
finally:
|
||||
self._maxheaderlen = old_maxheaderlen
|
||||
|
||||
def _handle_message_delivery_status(self, msg):
|
||||
# We can't just write the headers directly to self's file object
|
||||
# because this will leave an extra newline between the last header
|
||||
|
|
|
@ -3266,6 +3266,42 @@ Content-Type: application/x-foo;
|
|||
eq(s, 'My Document For You')
|
||||
|
||||
|
||||
|
||||
# Tests to ensure that signed parts of an email are completely preserved, as
|
||||
# required by RFC1847 section 2.1. Note that these are incomplete, because the
|
||||
# email package does not currently always preserve the body. See issue 1670765.
|
||||
class TestSigned(TestEmailBase):
|
||||
|
||||
def _msg_and_obj(self, filename):
|
||||
fp = openfile(findfile(filename))
|
||||
try:
|
||||
original = fp.read()
|
||||
msg = email.message_from_string(original)
|
||||
finally:
|
||||
fp.close()
|
||||
return original, msg
|
||||
|
||||
def _signed_parts_eq(self, original, result):
|
||||
# Extract the first mime part of each message
|
||||
import re
|
||||
repart = re.compile(r'^--([^\n]+)\n(.*?)\n--\1$', re.S | re.M)
|
||||
inpart = repart.search(original).group(2)
|
||||
outpart = repart.search(result).group(2)
|
||||
self.assertEqual(outpart, inpart)
|
||||
|
||||
def test_long_headers_as_string(self):
|
||||
original, msg = self._msg_and_obj('msg_45.txt')
|
||||
result = msg.as_string()
|
||||
self._signed_parts_eq(original, result)
|
||||
|
||||
def test_long_headers_flatten(self):
|
||||
original, msg = self._msg_and_obj('msg_45.txt')
|
||||
fp = StringIO()
|
||||
Generator(fp).flatten(msg)
|
||||
result = fp.getvalue()
|
||||
self._signed_parts_eq(original, result)
|
||||
|
||||
|
||||
|
||||
def _testclasses():
|
||||
mod = sys.modules[__name__]
|
||||
|
|
|
@ -48,6 +48,10 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #1670765: Prevent email.generator.Generator from re-wrapping
|
||||
headers in multipart/signed MIME parts, which fixes one of the sources of
|
||||
invalid modifications to such parts by Generator.
|
||||
|
||||
- Issue #7701: Fix crash in binascii.b2a_uu() in debug mode when given a
|
||||
1-byte argument. Patch by Victor Stinner.
|
||||
|
||||
|
|
Loading…
Reference in New Issue