Index: Lib/email/test/test_email.py =================================================================== --- Lib/email/test/test_email.py (revision 72551) +++ Lib/email/test/test_email.py (working copy) @@ -221,6 +221,23 @@ sys.stderr = old_stderr self.assertEqual(sfp.getvalue(), '') + def test_decode_bogus_uu_payload_noisily(self): + invalid = [('1', 'base64'), ('', 'x-uuencode')] + for payload, encoding in invalid: + msg = Message() + msg.set_payload(payload) + msg['Content-Transfer-Encoding'] = encoding + old_stderr = sys.stderr + msg.get_payload(decode=True) # Silent + try: + sys.stderr = sfp = StringIO() + msg.get_payload(decode=True, silent=False) # Raises + except: + sfp.write('Raised') + finally: + sys.stderr = old_stderr + self.assertEqual(sfp.getvalue(), 'Raised') + def test_decoded_generator(self): eq = self.assertEqual msg = self._msgobj('msg_07.txt') Index: Lib/email/message.py =================================================================== --- Lib/email/message.py (revision 72551) +++ Lib/email/message.py (working copy) @@ -163,7 +163,7 @@ else: self._payload.append(payload) - def get_payload(self, i=None, decode=False): + def get_payload(self, i=None, decode=False, silent=True): """Return a reference to the payload. The payload will either be a list object or a string. If you mutate @@ -200,7 +200,10 @@ return utils._bdecode(payload) except binascii.Error: # Incorrect padding - return payload + if silent: + return payload + else: + raise elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'): sfp = StringIO() try: @@ -208,7 +211,10 @@ payload = sfp.getvalue() except uu.Error: # Some decoding problem - return payload + if silent: + return payload + else: + raise # Everything else, including encodings with 8bit or 7bit are returned # unchanged. return payload