]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
#1379416: encode charset name to ascii to avoid unicode promotion of output
authorR. David Murray <rdmurray@bitdance.com>
Mon, 27 Dec 2010 19:17:17 +0000 (19:17 +0000)
committerR. David Murray <rdmurray@bitdance.com>
Mon, 27 Dec 2010 19:17:17 +0000 (19:17 +0000)
Lib/email/charset.py
Lib/email/test/test_email.py
Misc/NEWS

index ad56c58f809ffad09cb4d9eaba0857a2df74f94e..dddaa76c55d760614b52a383b98f0db6dc45dfdb 100644 (file)
@@ -209,7 +209,7 @@ class Charset:
                 input_charset = unicode(input_charset, 'ascii')
         except UnicodeError:
             raise errors.CharsetError(input_charset)
-        input_charset = input_charset.lower()
+        input_charset = input_charset.lower().encode('ascii')
         # Set the input charset after filtering through the aliases and/or codecs
         if not (input_charset in ALIASES or input_charset in CHARSETS):
             try:
index 358b6a7ef01217d3dbdce0cbba13373aa2abe8af..4aac500ce8317cd32b609abc33d03989932a91ad 100644 (file)
@@ -3140,6 +3140,13 @@ A very long line that must get split to something other than at the
             'attachment; filename*="iso-8859-1\'\'Fu%DFballer.ppt"',
             msg['Content-Disposition'])
 
+    def test_encode_unaliased_charset(self):
+        # Issue 1379416: when the charset has no output conversion,
+        # output was accidentally getting coerced to unicode.
+        res = Header('abc','iso-8859-2').encode()
+        self.assertEqual(res, '=?iso-8859-2?q?abc?=')
+        self.assertIsInstance(res, str)
+
 
 # Test RFC 2231 header parameters (en/de)coding
 class TestRFC2231(TestEmailBase):
index fe075fe09881d31f048939821e5134beadd8cd2d..809148cf39fe5557d2456281e45b11a8d276fdce 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #1379416: eliminated a source of accidental unicode promotion in
+  email.header.Header.encode.
+
 - Issue #5258/#10642: if site.py encounters a .pth file that generates an error,
   it now prints the filename, line number, and traceback to stderr and skips
   the rest of that individual file, instead of stopping processing entirely.