bpo-29742: asyncio get_extra_info() throws exception (#525) (#646) · python/cpython@db522dc (original) (raw)

3 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -542,8 +542,10 @@ def eof_received(self):
542 542 def _get_extra_info(self, name, default=None):
543 543 if name in self._extra:
544 544 return self._extra[name]
545 -else:
545 +elif self._transport is not None:
546 546 return self._transport.get_extra_info(name, default)
547 +else:
548 +return default
547 549
548 550 def _start_shutdown(self):
549 551 if self._in_shutdown:
Original file line number Diff line number Diff line change
@@ -95,5 +95,17 @@ def test_connection_lost(self):
95 95 test_utils.run_briefly(self.loop)
96 96 self.assertIsInstance(waiter.exception(), ConnectionAbortedError)
97 97
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 +
98 110 if __name__ == '__main__':
99 111 unittest.main()
Original file line number Diff line number Diff line change
@@ -43,6 +43,9 @@ Extension Modules
43 43 Library
44 44 -------
45 45
46 +- bpo-29742: get_extra_info() raises exception if get called on closed ssl transport.
47 + Patch by Nikolay Kim.
48 +
46 49 - bpo-8256: Fixed possible failing or crashing input() if attributes "encoding"
47 50 or "errors" of sys.stdin or sys.stdout are not set or are not strings.
48 51