Issue #10429: IMAP.starttls() stored the capabilities as bytes objects,
authorAntoine Pitrou <solipsis@pitrou.net>
Tue, 16 Nov 2010 17:55:26 +0000 (17:55 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Tue, 16 Nov 2010 17:55:26 +0000 (17:55 +0000)
rather than strings.

Lib/imaplib.py
Lib/test/test_imaplib.py
Misc/NEWS

index 421cb97139b07d5bc96a67844b65a8f28066e5af..9c38e1c823db14c1d22d69b1bd03ffde2998c31d 100644 (file)
@@ -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.
index 6b444901c022ab7d1fdad36587d82437d3a59b2f..b97989fa96cea5a489f8a9d2711bcb1bcebfde8f 100644 (file)
@@ -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)
 
index dc62b66b3041198c880871648e67b5f69daedf51..486c4e24d5436fe429fc2f8e6fe02bba2c3f9012 100644 (file)
--- 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?
 =================================