From dbe7519da9d0a99d68aaa773cde2793900dad44f Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Tue, 16 Nov 2010 17:55:26 +0000 Subject: [PATCH] Issue #10429: IMAP.starttls() stored the capabilities as bytes objects, rather than strings. --- Lib/imaplib.py | 22 +++++++++++----------- Lib/test/test_imaplib.py | 6 ++++++ Misc/NEWS | 3 +++ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Lib/imaplib.py b/Lib/imaplib.py index 421cb97139b..9c38e1c823d 100644 --- a/Lib/imaplib.py +++ b/Lib/imaplib.py @@ -196,13 +196,7 @@ class IMAP4: else: raise self.error(self.welcome) - typ, dat = self.capability() - if dat == [None]: - raise self.error('no CAPABILITY response from server') - dat = str(dat[-1], "ASCII") - dat = dat.upper() - self.capabilities = tuple(dat.split()) - + self._get_capabilities() if __debug__: if self.debug >= 3: self._mesg('CAPABILITIES: %r' % (self.capabilities,)) @@ -737,10 +731,7 @@ class IMAP4: self.sock = ssl_context.wrap_socket(self.sock) self.file = self.sock.makefile('rb') self._tls_established = True - typ, dat = self.capability() - if dat == [None]: - raise self.error('no CAPABILITY response from server') - self.capabilities = tuple(dat[-1].upper().split()) + self._get_capabilities() else: raise self.error("Couldn't establish TLS session") return self._untagged_response(typ, dat, name) @@ -956,6 +947,15 @@ class IMAP4: return typ, data + def _get_capabilities(self): + typ, dat = self.capability() + if dat == [None]: + raise self.error('no CAPABILITY response from server') + dat = str(dat[-1], "ASCII") + dat = dat.upper() + self.capabilities = tuple(dat.split()) + + def _get_response(self): # Read response and store. diff --git a/Lib/test/test_imaplib.py b/Lib/test/test_imaplib.py index 6b444901c02..b97989fa96c 100644 --- a/Lib/test/test_imaplib.py +++ b/Lib/test/test_imaplib.py @@ -208,6 +208,8 @@ class RemoteIMAPTest(unittest.TestCase): self.server.logout() def test_logincapa(self): + for cap in self.server.capabilities: + self.assertIsInstance(cap, str) self.assertTrue('LOGINDISABLED' in self.server.capabilities) self.assertTrue('AUTH=ANONYMOUS' in self.server.capabilities) rs = self.server.login(self.username, self.password) @@ -228,6 +230,8 @@ class RemoteIMAP_STARTTLSTest(RemoteIMAPTest): self.assertEqual(rs[0], 'OK') def test_logincapa(self): + for cap in self.server.capabilities: + self.assertIsInstance(cap, str) self.assertFalse('LOGINDISABLED' in self.server.capabilities) @@ -237,6 +241,8 @@ class RemoteIMAP_SSLTest(RemoteIMAPTest): imap_class = IMAP4_SSL def test_logincapa(self): + for cap in self.server.capabilities: + self.assertIsInstance(cap, str) self.assertFalse('LOGINDISABLED' in self.server.capabilities) self.assertTrue('AUTH=PLAIN' in self.server.capabilities) diff --git a/Misc/NEWS b/Misc/NEWS index dc62b66b304..486c4e24d54 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,6 +13,9 @@ Core and Builtins Library ------- +- Issue #10429: IMAP.starttls() stored the capabilities as bytes objects, + rather than strings. + What's New in Python 3.2 Alpha 4? =================================