cpython: 34fb36972f8d (original) (raw)

Mercurial > cpython

changeset 89053:34fb36972f8d 3.3

#19772: Do not mutate message when downcoding to 7bit. This is a bit of an ugly hack because of the way generator pieces together the output message. The deepcopys aren't too expensive, though, because we know it is only called on messages that are not multiparts, and the payload (the thing that could be large) is an immutable object. Test and preliminary work on patch by Vajrasky Kok. [#19772]

R David Murray rdmurray@bitdance.com
date Sat, 08 Feb 2014 11:48:20 -0500
parents 58be80e7e653
children 2e97d3500970 1dcb9d0d53a6
files Lib/email/generator.py Lib/test/test_email/test_email.py Misc/NEWS
diffstat 3 files changed, 28 insertions(+), 1 deletions(-)[+] [-] Lib/email/generator.py 14 Lib/test/test_email/test_email.py 12 Misc/NEWS 3

line wrap: on

line diff

--- a/Lib/email/generator.py +++ b/Lib/email/generator.py @@ -12,6 +12,7 @@ import time import random import warnings +from copy import deepcopy from io import StringIO, BytesIO from email._policybase import compat32 from email.header import Header @@ -173,10 +174,18 @@ class Generator: # necessary. oldfp = self._fp try:

@@ -225,9 +234,14 @@ class Generator: if _has_surrogates(msg._payload): charset = msg.get_param('charset') if charset is not None:

--- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -3495,7 +3495,7 @@ Here's the message body self.assertTrue(msg.get_payload(0).get_payload().endswith('\r\n')) -class Test8BitBytesHandling(unittest.TestCase): +class Test8BitBytesHandling(TestEmailBase): # In Python3 all input is string, but that doesn't work if the actual input # uses an 8bit transfer encoding. To hack around that, in email 5.1 we # decode byte streams using the surrogateescape error handler, and @@ -3748,6 +3748,16 @@ class Test8BitBytesHandling(unittest.Tes email.generator.Generator(out).flatten(msg) self.assertEqual(out.getvalue(), self.non_latin_bin_msg_as7bit_wrapped)

+ def test_bytes_generator_with_unix_from(self): # The unixfrom contains a current date, so we can't check it # literally. Just make sure the first word is 'From' and the

--- a/Misc/NEWS +++ b/Misc/NEWS @@ -48,6 +48,9 @@ Core and Builtins Library ------- +- Issue #19772: email.generator no longer mutates the message object when