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 |