diff --git a/Lib/email/header.py b/Lib/email/header.py index d3118b03ebd..8c325145aa8 100644 --- a/Lib/email/header.py +++ b/Lib/email/header.py @@ -314,7 +314,7 @@ def encode(self, splitchars=';, \t', maxlinelen=None, linesep='\n'): self._continuation_ws, splitchars) for string, charset in self._chunks: lines = string.splitlines() - formatter.feed(lines[0], charset) + formatter.feed(lines[0] if lines else '', charset) for line in lines[1:]: formatter.newline() if charset.header_encoding is not None: diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py index 5adecae9fce..721a765f962 100644 --- a/Lib/email/test/test_email.py +++ b/Lib/email/test/test_email.py @@ -3705,6 +3705,13 @@ def test_shift_jis_charset(self): h = Header('文', charset='shift_jis') self.assertEqual(h.encode(), '=?iso-2022-jp?b?GyRCSjgbKEI=?=') + def test_flatten_header_with_no_value(self): + # Issue 11401 (regression from email 4.x) Note that the space after + # the header doesn't reflect the input, but this is also the way + # email 4.x behaved. At some point it would be nice to fix that. + msg = email.message_from_string("EmptyHeader:") + self.assertEqual(str(msg), "EmptyHeader: \n\n") + # Test RFC 2231 header parameters (en/de)coding diff --git a/Misc/NEWS b/Misc/NEWS index 1b838a85263..4b2aa5923f5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -72,6 +72,9 @@ Core and Builtins Library ------- +- Issue #11401: fix handling of headers with no value; this fixes a regression + relative to Python2 and the result is now the same as it was in Python2. + - Issue #9298: base64 bodies weren't being folded to line lengths less than 78, which was a regression relative to Python2. Unlike Python2, the last line of the folded body now ends with a carriage return.