[Python-checkins] r77526 - in python/branches/release26-maint: Lib/email/generator.py Lib/email/test/test_email.py Misc/NEWS
r.david.murray
python-checkins at python.org
Sat Jan 16 17:32:39 CET 2010
Author: r.david.murray
Date: Sat Jan 16 17:32:39 2010
New Revision: 77526
Log:
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.
........
Modified:
python/branches/release26-maint/ (props changed)
python/branches/release26-maint/Lib/email/generator.py
python/branches/release26-maint/Lib/email/test/test_email.py
python/branches/release26-maint/Misc/NEWS
Modified: python/branches/release26-maint/Lib/email/generator.py
==============================================================================
--- python/branches/release26-maint/Lib/email/generator.py (original)
+++ python/branches/release26-maint/Lib/email/generator.py Sat Jan 16 17:32:39 2010
@@ -235,6 +235,17 @@
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
Modified: python/branches/release26-maint/Lib/email/test/test_email.py
==============================================================================
--- python/branches/release26-maint/Lib/email/test/test_email.py (original)
+++ python/branches/release26-maint/Lib/email/test/test_email.py Sat Jan 16 17:32:39 2010
@@ -3267,6 +3267,42 @@
+# 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__]
return [getattr(mod, name) for name in dir(mod) if name.startswith('Test')]
Modified: python/branches/release26-maint/Misc/NEWS
==============================================================================
--- python/branches/release26-maint/Misc/NEWS (original)
+++ python/branches/release26-maint/Misc/NEWS Sat Jan 16 17:32:39 2010
@@ -48,6 +48,10 @@
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.
More information about the Python-checkins
mailing list