diff options
| author | Charles-François Natali <neologix@free.fr> | 2011-05-24 21:10:54 (GMT) | 
|---|---|---|
| committer | Charles-François Natali <neologix@free.fr> | 2011-05-24 21:10:54 (GMT) | 
| commit | b94e0cde60dbce9f99ecdd5e3846820c60a0f8bf (patch) | |
| tree | a93349b43646ac15d6398f1da9d084084ae4107e /Lib/imaplib.py | |
| parent | 40b41e1ffd4efc5718ed438a725765d6e4d1feae (diff) | |
| download | cpython-b94e0cde60dbce9f99ecdd5e3846820c60a0f8bf.zip cpython-b94e0cde60dbce9f99ecdd5e3846820c60a0f8bf.tar.gz cpython-b94e0cde60dbce9f99ecdd5e3846820c60a0f8bf.tar.bz2  | |
Issue #1441530: In imaplib, use makefile() to wrap the SSL socket to avoid
heap fragmentation and MemoryError with some malloc implementations.
Diffstat (limited to 'Lib/imaplib.py')
| -rw-r--r-- | Lib/imaplib.py | 18 | 
1 files changed, 4 insertions, 14 deletions
diff --git a/Lib/imaplib.py b/Lib/imaplib.py index 5693191..c576927 100644 --- a/Lib/imaplib.py +++ b/Lib/imaplib.py @@ -1158,28 +1158,17 @@ else:              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 @@ else:          def shutdown(self):              """Close I/O established in "open".""" +            self.file.close()              self.sock.close()  | 
