diff -r d6501421b86b -r 62b280b61de7 Lib/email/base64mime.py --- a/Lib/email/base64mime.py Wed Apr 16 18:33:39 2014 +0200 +++ b/Lib/email/base64mime.py Thu Apr 17 10:50:30 2014 -0400 @@ -34,8 +34,8 @@ ] -from base64 import b64encode -from binascii import b2a_base64, a2b_base64 +from base64 import b64encode, urlsafe_b64decode +from binascii import b2a_base64 CRLF = '\r\n' NL = '\n' @@ -108,10 +108,12 @@ """ if not string: return bytes() + # Doing urlsafe b64decode is a little non-obvious, but a few email products + # seem to generate it. See #12489 elif isinstance(string, str): - return a2b_base64(string.encode('raw-unicode-escape')) + return urlsafe_b64decode(string.encode('raw-unicode-escape')) else: - return a2b_base64(string) + return urlsafe_b64decode(string) # For convenience and backwards compatibility w/ standard base64 module diff -r d6501421b86b -r 62b280b61de7 Lib/test/test_email/test_email.py --- a/Lib/test/test_email/test_email.py Wed Apr 16 18:33:39 2014 +0200 +++ b/Lib/test/test_email/test_email.py Thu Apr 17 10:50:30 2014 -0400 @@ -4006,6 +4006,9 @@ eq = self.assertEqual eq(base64mime.decode(''), b'') eq(base64mime.decode('aGVsbG8='), b'hello') + eq(base64mime.decode( + 'QW5tZWxkdW5nIE5ldHphbnNjaGx1c3MgU_xkcmluZzNwLmpwZw=='), + b'Anmeldung Netzanschluss S\xfcdring3p.jpg') def test_encode(self): eq = self.assertEqual