diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2024-03-05 17:27:22 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-05 17:27:22 (GMT) |
commit | 85c32ad9fd3780d8cc68a692c396cc840c093d69 (patch) | |
tree | a9709fc1404a1c3d60e517c6717d87cdb20e0056 /Lib | |
parent | 34efd49280ca710fd0358c72323c9d0c45a32b27 (diff) | |
download | cpython-85c32ad9fd3780d8cc68a692c396cc840c093d69.zip cpython-85c32ad9fd3780d8cc68a692c396cc840c093d69.tar.gz cpython-85c32ad9fd3780d8cc68a692c396cc840c093d69.tar.bz2 |
[3.12] gh-76511: Fix email.Message.as_string() for non-ASCII message with ASCII charset (GH-116125) (GH-116364)
(cherry picked from commit f97f25ef5dfcdfec0d9a359fd970abd139cf3428)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/email/generator.py | 2 | ||||
-rw-r--r-- | Lib/email/message.py | 2 | ||||
-rw-r--r-- | Lib/test/test_email/test_email.py | 15 |
3 files changed, 17 insertions, 2 deletions
diff --git a/Lib/email/generator.py b/Lib/email/generator.py index 7ccbe10..c8056ad 100644 --- a/Lib/email/generator.py +++ b/Lib/email/generator.py @@ -243,7 +243,7 @@ class Generator: # existing message. msg = deepcopy(msg) del msg['content-transfer-encoding'] - msg.set_payload(payload, charset) + msg.set_payload(msg._payload, charset) payload = msg.get_payload() self._munge_cte = (msg['content-transfer-encoding'], msg['content-type']) diff --git a/Lib/email/message.py b/Lib/email/message.py index fe76958..a14cca5 100644 --- a/Lib/email/message.py +++ b/Lib/email/message.py @@ -340,7 +340,7 @@ class Message: return if not isinstance(charset, Charset): charset = Charset(charset) - payload = payload.encode(charset.output_charset) + payload = payload.encode(charset.output_charset, 'surrogateescape') if hasattr(payload, 'decode'): self._payload = payload.decode('ascii', 'surrogateescape') else: diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py index 2a23709..a373c53 100644 --- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -336,6 +336,21 @@ class TestMessageAPI(TestEmailBase): msg = email.message_from_bytes(source) self.assertEqual(msg.as_string(), expected) + def test_nonascii_as_string_with_ascii_charset(self): + m = textwrap.dedent("""\ + MIME-Version: 1.0 + Content-type: text/plain; charset="us-ascii" + Content-Transfer-Encoding: 8bit + + Test if non-ascii messages with no Content-Transfer-Encoding set + can be as_string'd: + Föö bär + """) + source = m.encode('iso-8859-1') + expected = source.decode('ascii', 'replace') + msg = email.message_from_bytes(source) + self.assertEqual(msg.as_string(), expected) + def test_nonascii_as_string_without_content_type_and_cte(self): m = textwrap.dedent("""\ MIME-Version: 1.0 |