diff options
author | Giampaolo RodolĂ <g.rodola@gmail.com> | 2010-08-21 18:35:05 (GMT) |
---|---|---|
committer | Giampaolo RodolĂ <g.rodola@gmail.com> | 2010-08-21 18:35:05 (GMT) |
commit | 5c8c9a2c330db5a96eb1149d388b411e7ec5acd3 (patch) | |
tree | 1f224318ee94ec3eff10df60c90b82f982741f0e | |
parent | 6cbe4275cbb48ae4161143f8b97636fc19f678e5 (diff) | |
download | cpython-5c8c9a2c330db5a96eb1149d388b411e7ec5acd3.zip cpython-5c8c9a2c330db5a96eb1149d388b411e7ec5acd3.tar.gz cpython-5c8c9a2c330db5a96eb1149d388b411e7ec5acd3.tar.bz2 |
fix issue #9129: added proper error handling when accepting new connections in SMTPServer.handle_accept
-rwxr-xr-x | Lib/smtpd.py | 17 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
2 files changed, 18 insertions, 2 deletions
diff --git a/Lib/smtpd.py b/Lib/smtpd.py index b408278..e8459f0 100755 --- a/Lib/smtpd.py +++ b/Lib/smtpd.py @@ -413,8 +413,21 @@ class SMTPServer(asyncore.dispatcher): self.__class__.__name__, time.ctime(time.time()), localaddr, remoteaddr), file=DEBUGSTREAM) - def handle_accept(self): - conn, addr = self.accept() + def handle_accept(self) + try: + conn, addr = self.accept() + except TypeError: + # sometimes accept() might return None + return + except socket.error, err: + # ECONNABORTED might be thrown + if err[0] != errno.ECONNABORTED: + raise + return + else: + # sometimes addr == None instead of (ip, port) + if addr == None: + return print('Incoming connection from %s' % repr(addr), file=DEBUGSTREAM) channel = self.channel_class(self, conn, addr) @@ -117,6 +117,9 @@ Extensions Library ------- +- Issue #9129: smtpd.py module is vulnerable to DoS attacks due to missing + error handling when accepting new connections. + - Issue #843590: Make "macintosh" an alias to the "mac_roman" encoding. - Create os.fsdecode(): decode from the filesystem encoding with |