[Python-checkins] bpo-40597: Allow email.contextmanager set_content() to set a null string. (GH-20542)

Mark Sapiro webhook-mailer at python.org
Wed Jul 8 17:00:44 EDT 2020


https://github.com/python/cpython/commit/4fa61a7732923f92de0f7830c12da48c4cec937f
commit: 4fa61a7732923f92de0f7830c12da48c4cec937f
branch: master
author: Mark Sapiro <mark at msapiro.net>
committer: GitHub <noreply at github.com>
date: 2020-07-08T14:00:35-07:00
summary:

bpo-40597: Allow email.contextmanager set_content() to set a null string. (GH-20542)

files:
A Misc/NEWS.d/next/Library/2020-05-30-12-44-29.bpo-39384.Iqxy3q.rst
M Lib/email/contentmanager.py
M Lib/test/test_email/test_contentmanager.py

diff --git a/Lib/email/contentmanager.py b/Lib/email/contentmanager.py
index 2b4b8757f46f6..b91fb0e5bca7a 100644
--- a/Lib/email/contentmanager.py
+++ b/Lib/email/contentmanager.py
@@ -146,7 +146,7 @@ def embedded_body(lines): return linesep.join(lines) + linesep
     def normal_body(lines): return b'\n'.join(lines) + b'\n'
     if cte==None:
         # Use heuristics to decide on the "best" encoding.
-        if max(len(x) for x in lines) <= policy.max_line_length:
+        if max((len(x) for x in lines), default=0) <= policy.max_line_length:
             try:
                 return '7bit', normal_body(lines).decode('ascii')
             except UnicodeDecodeError:
diff --git a/Lib/test/test_email/test_contentmanager.py b/Lib/test/test_email/test_contentmanager.py
index 64dca2d017e62..f4f6bb715acdc 100644
--- a/Lib/test/test_email/test_contentmanager.py
+++ b/Lib/test/test_email/test_contentmanager.py
@@ -303,6 +303,19 @@ def test_set_text_plain(self):
         self.assertEqual(m.get_payload(decode=True).decode('utf-8'), content)
         self.assertEqual(m.get_content(), content)
 
+    def test_set_text_plain_null(self):
+        m = self._make_message()
+        content = ''
+        raw_data_manager.set_content(m, content)
+        self.assertEqual(str(m), textwrap.dedent("""\
+            Content-Type: text/plain; charset="utf-8"
+            Content-Transfer-Encoding: 7bit
+
+
+            """))
+        self.assertEqual(m.get_payload(decode=True).decode('utf-8'), '\n')
+        self.assertEqual(m.get_content(), '\n')
+
     def test_set_text_html(self):
         m = self._make_message()
         content = "<p>Simple message.</p>\n"
diff --git a/Misc/NEWS.d/next/Library/2020-05-30-12-44-29.bpo-39384.Iqxy3q.rst b/Misc/NEWS.d/next/Library/2020-05-30-12-44-29.bpo-39384.Iqxy3q.rst
new file mode 100644
index 0000000000000..482ae624da079
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-05-30-12-44-29.bpo-39384.Iqxy3q.rst
@@ -0,0 +1 @@
+Fixed email.contentmanager to allow set_content() to set a null string.



More information about the Python-checkins mailing list