diff --git a/Lib/distutils/tests/test_util.py b/Lib/distutils/tests/test_util.py index bf0d4333f9..b43ce21b45 100644 --- a/Lib/distutils/tests/test_util.py +++ b/Lib/distutils/tests/test_util.py @@ -285,6 +285,25 @@ class UtilTestCase(support.EnvironGuard, unittest.TestCase): 'header%(8s)s') % {'8s': '\n'+8*' '} self.assertEqual(res, wanted) + def test_rfc822_escape_is_bytes(self): + header = b'I am a\npoor\nlonesome\nheader\n' + res = rfc822_escape(header) + wanted = ('I am a%(8s)spoor%(8s)slonesome%(8s)s' + 'header%(8s)s') % {'8s': '\n'+8*' '} + self.assertEqual(res, wanted) + + def test_rfc822_escape_is_none(self): + header = None + res = rfc822_escape(header) + wanted = ('None') + self.assertEqual(res, wanted) + + def test_rfc822_escape_is_int(self): + header = int(1234) + res = rfc822_escape(header) + wanted = ('1234') + self.assertEqual(res, wanted) + def test_dont_write_bytecode(self): # makes sure byte_compile raise a DistutilsError # if sys.dont_write_bytecode is True diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py index 17a94bc428..3dfff93ed7 100644 --- a/Lib/distutils/util.py +++ b/Lib/distutils/util.py @@ -472,6 +472,10 @@ def rfc822_escape (header): """Return a version of the string escaped for inclusion in an RFC-822 header, by ensuring there are 8 spaces space after each newline. """ + if isinstance(header, bytes): + header = header.decode("utf-8") + elif not isinstance(header, str): + header = str(header) # force str anyway lines = header.split('\n') sep = '\n' + 8 * ' ' return sep.join(lines)