mirror of https://github.com/python/cpython
gh-109534: fix reference leak when SSL handshake fails (#114074)
This commit is contained in:
parent
7b9d406729
commit
80aa7b3688
|
@ -235,6 +235,10 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
|
|||
await waiter
|
||||
except BaseException:
|
||||
transport.close()
|
||||
# gh-109534: When an exception is raised by the SSLProtocol object the
|
||||
# exception set in this future can keep the protocol object alive and
|
||||
# cause a reference cycle.
|
||||
waiter = None
|
||||
raise
|
||||
# It's now up to the protocol to handle the connection.
|
||||
|
||||
|
|
|
@ -579,6 +579,7 @@ class SSLProtocol(protocols.BufferedProtocol):
|
|||
|
||||
peercert = sslobj.getpeercert()
|
||||
except Exception as exc:
|
||||
handshake_exc = None
|
||||
self._set_state(SSLProtocolState.UNWRAPPED)
|
||||
if isinstance(exc, ssl.CertificateError):
|
||||
msg = 'SSL handshake failed on verifying the certificate'
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
Fix a reference leak in
|
||||
:class:`asyncio.selector_events.BaseSelectorEventLoop` when SSL handshakes
|
||||
fail. Patch contributed by Jamie Phan.
|
Loading…
Reference in New Issue