[Python-checkins] cpython (2.7): Issue #1441530: In imaplib, use makefile() to wrap the SSL socket to avoid

charles-francois.natali python-checkins at python.org
Tue May 24 23:12:18 CEST 2011


http://hg.python.org/cpython/rev/0dee36595699
changeset:   70351:0dee36595699
branch:      2.7
user:        Charles-François Natali <neologix at free.fr>
date:        Tue May 24 23:10:54 2011 +0200
summary:
  Issue #1441530: In imaplib, use makefile() to wrap the SSL socket to avoid
heap fragmentation and MemoryError with some malloc implementations.

files:
  Lib/imaplib.py |  18 ++++--------------
  Misc/NEWS      |   3 +++
  2 files changed, 7 insertions(+), 14 deletions(-)


diff --git a/Lib/imaplib.py b/Lib/imaplib.py
--- a/Lib/imaplib.py
+++ b/Lib/imaplib.py
@@ -1158,28 +1158,17 @@
             self.port = port
             self.sock = socket.create_connection((host, port))
             self.sslobj = ssl.wrap_socket(self.sock, self.keyfile, self.certfile)
+            self.file = self.sslobj.makefile('rb')
 
 
         def read(self, size):
             """Read 'size' bytes from remote."""
-            # sslobj.read() sometimes returns < size bytes
-            chunks = []
-            read = 0
-            while read < size:
-                data = self.sslobj.read(min(size-read, 16384))
-                read += len(data)
-                chunks.append(data)
-
-            return ''.join(chunks)
+            return self.file.read(size)
 
 
         def readline(self):
             """Read line from remote."""
-            line = []
-            while 1:
-                char = self.sslobj.read(1)
-                line.append(char)
-                if char in ("\n", ""): return ''.join(line)
+            return self.file.readline()
 
 
         def send(self, data):
@@ -1195,6 +1184,7 @@
 
         def shutdown(self):
             """Close I/O established in "open"."""
+            self.file.close()
             self.sock.close()
 
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -83,6 +83,9 @@
 Library
 -------
 
+- Issue #1441530: In imaplib, use makefile() to wrap the SSL socket to avoid
+  heap fragmentation and MemoryError with some malloc implementations.
+
 - Issue #12100: Don't reset incremental encoders of CJK codecs at each call to
   their encode() method anymore, but continue to call the reset() method if the
   final argument is True.

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list