Issue #23197, asyncio: On SSL handshake failure, check if the waiter is

cancelled before setting its exception.

* Add unit tests for this case.
* Cleanup also sslproto.py
This commit is contained in:
Victor Stinner 2015-01-14 16:56:20 +01:00
parent f651a60407
commit 177e9f0855
4 changed files with 65 additions and 7 deletions

View file

@ -530,10 +530,11 @@ class SSLProtocol(protocols.Protocol):
self._in_handshake = False
sslobj = self._sslpipe.ssl_object
peercert = None if handshake_exc else sslobj.getpeercert()
try:
if handshake_exc is not None:
raise handshake_exc
peercert = sslobj.getpeercert()
if not hasattr(self._sslcontext, 'check_hostname'):
# Verify hostname if requested, Python 3.4+ uses check_hostname
# and checks the hostname in do_handshake()
@ -551,7 +552,7 @@ class SSLProtocol(protocols.Protocol):
self, exc_info=True)
self._transport.close()
if isinstance(exc, Exception):
if self._waiter is not None:
if self._waiter is not None and not self._waiter.cancelled():
self._waiter.set_exception(exc)
return
else: