Skip to content

Commit db522dc

Browse files
authored
bpo-29742: asyncio get_extra_info() throws exception (#525) (#646)
1 parent 216803d commit db522dc

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

Lib/asyncio/sslproto.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -542,8 +542,10 @@ def eof_received(self):
542542
def _get_extra_info(self, name, default=None):
543543
if name in self._extra:
544544
return self._extra[name]
545-
else:
545+
elif self._transport is not None:
546546
return self._transport.get_extra_info(name, default)
547+
else:
548+
return default
547549

548550
def _start_shutdown(self):
549551
if self._in_shutdown:

Lib/test/test_asyncio/test_sslproto.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,5 +95,17 @@ def test_connection_lost(self):
9595
test_utils.run_briefly(self.loop)
9696
self.assertIsInstance(waiter.exception(), ConnectionAbortedError)
9797

98+
def test_get_extra_info_on_closed_connection(self):
99+
waiter = asyncio.Future(loop=self.loop)
100+
ssl_proto = self.ssl_protocol(waiter)
101+
self.assertIsNone(ssl_proto._get_extra_info('socket'))
102+
default = object()
103+
self.assertIs(ssl_proto._get_extra_info('socket', default), default)
104+
self.connection_made(ssl_proto)
105+
self.assertIsNotNone(ssl_proto._get_extra_info('socket'))
106+
ssl_proto.connection_lost(None)
107+
self.assertIsNone(ssl_proto._get_extra_info('socket'))
108+
109+
98110
if __name__ == '__main__':
99111
unittest.main()

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ Extension Modules
4343
Library
4444
-------
4545

46+
- bpo-29742: get_extra_info() raises exception if get called on closed ssl transport.
47+
Patch by Nikolay Kim.
48+
4649
- bpo-8256: Fixed possible failing or crashing input() if attributes "encoding"
4750
or "errors" of sys.stdin or sys.stdout are not set or are not strings.
4851

0 commit comments

Comments
 (0)