diff -r b2d238adf802 Lib/imaplib.py --- a/Lib/imaplib.py Wed Feb 18 08:56:47 2015 -0500 +++ b/Lib/imaplib.py Mon Mar 30 22:49:49 2015 -0400 @@ -1313,7 +1313,7 @@ def process(self, data): ret = self.mech(self.decode(data)) if ret is None: - return '*' # Abort conversation + return b'*' # Abort conversation return self.encode(ret) def encode(self, inp): diff -r b2d238adf802 Lib/test/test_imaplib.py --- a/Lib/test/test_imaplib.py Wed Feb 18 08:56:47 2015 -0500 +++ b/Lib/test/test_imaplib.py Mon Mar 30 22:49:49 2015 -0400 @@ -341,6 +341,21 @@ ret, data = client.login_cram_md5("tim", b"tanstaaftanstaaf") self.assertEqual(ret, "OK") + + @reap_threads + def test_aborted_authentication(self): + + class MyServer(SimpleIMAPHandler): + + def cmd_AUTHENTICATE(self, tag, args): + self._send_textline('+') + self.response = yield + self._send_tagged(tag, 'NO', '[AUTHENTICATIONFAILED] aborted') + + with self.reaped_pair(MyServer) as (server, client): + with self.assertRaises(imaplib.IMAP4.error): + code, data = client.authenticate('MYAUTH', lambda x: None) + def test_linetoolong(self): class TooLongHandler(SimpleIMAPHandler): def handle(self):