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

3 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -543,8 +543,10 @@ def eof_received(self):
543 543 def _get_extra_info(self, name, default=None):
544 544 if name in self._extra:
545 545 return self._extra[name]
546 -else:
546 +elif self._transport is not None:
547 547 return self._transport.get_extra_info(name, default)
548 +else:
549 +return default
548 550
549 551 def _start_shutdown(self):
550 552 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
@@ -335,6 +335,9 @@ Library
335 335 - bpo-28518: Start a transaction implicitly before a DML statement.
336 336 Patch by Aviv Palivoda.
337 337
338 +- bpo-29742: get_extra_info() raises exception if get called on closed ssl transport.
339 + Patch by Nikolay Kim.
340 +
338 341 - Issue #16285: urrlib.parse.quote is now based on RFC 3986 and hence includes
339 342 '~' in the set of characters that is not quoted by default. Patch by
340 343 Christian Theune and Ratnadeep Debnath.