[issue9010] Infinite loop in imaplib.IMAP4_SSL when used with Gmail

2010-06-16 Thread Ruben Bakker

New submission from Ruben Bakker :

When using imaplib.IMAP4_SSL to open a Gmail mailbox, the readline method can 
go into a infinite loop. It happens after Gmail drops the connection, usually 
after some time/inactivity. The next imaplib request will cause the infinite 
loop inside the readline() method.

Steps to reproduce:
Perform this script (use python -i to get the prompt):

import imaplib

HOST="imap.gmail.com"
PORT=993
USERNAME="usern...@gmail.com"
PASSWORD="password"

server = imaplib.IMAP4_SSL(host=HOST, port=PORT)
server.login(USERNAME, PASSWORD)

def f():
print server.select("INBOX")
print server.uid("FETCH", "1:*", "(UID FLAGS BODY.PEEK[HEADER.FIELDS 
(Subject)])")

Call the f() function and then wait about about an hour. Call f() again and 
server.select() will not return but take all CPU.

Add this line in IMAP4_SSL
  if not char: raise self.abort('socket error: EOF')

complete method:
def readline(self):
"""Read line from remote."""
line = []
while 1:
char = self.sslobj.read(1)
if not char: raise self.abort('socket error: EOF')
line.append(char)
if char == "\n": return ''.join(line)

--
components: Library (Lib)
messages: 107925
nosy: Ruben.Bakker
priority: normal
severity: normal
status: open
title: Infinite loop in imaplib.IMAP4_SSL when used with Gmail
type: behavior
versions: Python 2.6

___
Python tracker 
<http://bugs.python.org/issue9010>
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue9010] Infinite loop in imaplib.IMAP4_SSL when used with Gmail

2010-06-16 Thread Ruben Bakker

Ruben Bakker  added the comment:

I forgot to mention that the section after "Add this line to IMAP4_SSL" 
describes the solution. Sorry about that.

--

___
Python tracker 
<http://bugs.python.org/issue9010>
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue9010] Infinite loop in imaplib.IMAP4_SSL when used with Gmail

2010-06-17 Thread Ruben Bakker

Ruben Bakker  added the comment:

I installed Python 2.7RC1 on Mac OS X 10.6.3 and tried my script and it
worked for me. Imaplib throws the right exception instead of looping
forever:

Traceback (most recent call last):
  File "", line 1, in 
  File "imapmail/explore/test2.py", line 30, in f
server.select("INBOX")
  File
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py",
line 642, in select
typ, dat = self._simple_command(name, mailbox)
  File
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py",
line 1060, in _simple_command
return self._command_complete(name, self._command(name, *args))
  File
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py",
line 890, in _command_complete
raise self.abort('command: %s => %s' % (name, val))
imaplib.abort: command: SELECT => socket error: EOF
>>>

On Wed, Jun 16, 2010 at 6:12 PM, Shashwat Anand wrote:

>
> Shashwat Anand  added the comment:
>
> "import imaplib
>
> HOST="imap.gmail.com"
> PORT=993
> USERNAME="usern...@gmail.com"
> PASSWORD="password"
>
> server = imaplib.IMAP4_SSL(host=HOST, port=PORT)
> server.login(USERNAME, PASSWORD)
>
> def f():
>print server.select("INBOX")
>print server.uid("FETCH", "1:*", "(UID FLAGS BODY.PEEK[HEADER.FIELDS
> (Subject)])")
>
> Call the f() function and then wait about about an hour. Call f() again and
> server.select() will not return but take all CPU."
>
> Tried to reproduce this on Python 2.7RC1. Seemed Ok to me. Took some 3
> seconds to call f() not only once, but twice, thrice.
>
> --
> nosy: +l0nwlf
>
> ___
> Python tracker 
> <http://bugs.python.org/issue9010>
> ___
>

--
Added file: http://bugs.python.org/file17695/unnamed

___
Python tracker 
<http://bugs.python.org/issue9010>
___I installed Python 2.7RC1 on Mac OS X 10.6.3 and tried my script and it worked 
for me. Imaplib throws the right exception instead of looping 
forever:>>> f()Traceback (most 
recent call last):

  File "<stdin>", line 1, in 
<module>  File "imapmail/explore/test2.py", line 
30, in f    server.select("INBOX")  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py",
 line 642, in select

    typ, dat = self._simple_command(name, mailbox)  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py",
 line 1060, in _simple_command    return 
self._command_complete(name, self._command(name, *args))

  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py",
 line 890, in _command_complete    raise self.abort('command: 
%s => %s' % (name, val))imaplib.abort: command: SELECT => 
socket error: EOF

>>> On Wed, Jun 16, 2010 at 6:12 PM, Shashwat Anand <mailto:rep...@bugs.python.org";>rep...@bugs.python.org> 
wrote:


Shashwat Anand <mailto:anand.shash...@gmail.com";>anand.shash...@gmail.com> added 
the comment:

"import imaplib

HOST="http://imap.gmail.com"; 
target="_blank">imap.gmail.com"
PORT=993
USERNAME="mailto:usern...@gmail.com";>usern...@gmail.com"
PASSWORD="password"

server = imaplib.IMAP4_SSL(host=HOST, port=PORT)
server.login(USERNAME, PASSWORD)

def f():
        print server.select("INBOX")
        print server.uid("FETCH", "1:*", "(UID 
FLAGS BODY.PEEK[HEADER.FIELDS (Subject)])")

Call the f() function and then wait about about an hour. Call f() again and 
server.select() will not return but take all CPU."

Tried to reproduce this on Python 2.7RC1. Seemed Ok to me. Took some 3 
seconds to call f() not only once, but twice, thrice.

--
nosy: +l0nwlf

___
Python tracker <mailto:rep...@bugs.python.org";>rep...@bugs.python.org>
<http://bugs.python.org/issue9010"; 
target="_blank">http://bugs.python.org/issue9010>
___
-- Ruben 
Bakkeruncomplex gmbhhttp://mailplaneapp.com";>http://mailplaneapp.com

___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com