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. |