[Python-Dev] Bug in smtpd.SMTPChannel.smtp_MAIL

Derek Shockey derek.shockey at gmail.com
Sat Oct 20 23:00:38 CEST 2007


smtpd.SMTPChannel contains a bug such that when connected to an SMTPServer
(or any subclass thereof), issuing a MAIL command with no argument closes
the socket and gives this error on the server:

error: uncaptured python exception, closing channel <smtpd.SMTPChannelconnected
127.0.0.1:58587 at 0x847d8> (<type 'exceptions.TypeError'>:'NoneType' object
is unsubscriptable
[/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/asyncore.py|read|68]
[/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/asyncore.py|handle_read_event|390]
[/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/asynchat.py|handle_read|137]
[/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/smtpd.py|found_terminator|158]
[/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/smtpd.py|smtp_MAIL|224]
[/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/smtpd.py|__getaddr|212])

The desired result is of course is to respond with a 501 Syntax error. The
problem arises because the arg parameter passed to each smtp_* command
handler function is None when there is no argument. arg is passed on to
__getaddr which attempts a slice on the None object.

I think the most elegant solution would be to insert a "if not arg" check in
__getaddr and return. The existing smtp_MAIL code will then issue the 501
Syntax error.


-Derek Shockey
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/python-dev/attachments/20071020/bca186ab/attachment.htm 


More information about the Python-Dev mailing list