mirror of
				https://github.com/python/cpython.git
				synced 2025-10-29 20:51:26 +00:00 
			
		
		
		
	bpo-43952: Fix multiprocessing Listener authkey bug (GH-25845)
Listener.accept() no longer hangs when authkey is an empty bytes object.
This commit is contained in:
		
							parent
							
								
									3a72fc36f9
								
							
						
					
					
						commit
						686ec17f50
					
				
					 3 changed files with 23 additions and 1 deletions
				
			
		|  | @ -476,8 +476,9 @@ def accept(self): | |||
|         ''' | ||||
|         if self._listener is None: | ||||
|             raise OSError('listener is closed') | ||||
| 
 | ||||
|         c = self._listener.accept() | ||||
|         if self._authkey: | ||||
|         if self._authkey is not None: | ||||
|             deliver_challenge(c, self._authkey) | ||||
|             answer_challenge(c, self._authkey) | ||||
|         return c | ||||
|  |  | |||
|  | @ -3504,6 +3504,25 @@ def test_context(self): | |||
|         if self.TYPE == 'processes': | ||||
|             self.assertRaises(OSError, l.accept) | ||||
| 
 | ||||
|     def test_empty_authkey(self): | ||||
|         # bpo-43952: allow empty bytes as authkey | ||||
|         def handler(*args): | ||||
|             raise RuntimeError('Connection took too long...') | ||||
| 
 | ||||
|         def run(addr, authkey): | ||||
|             client = self.connection.Client(addr, authkey=authkey) | ||||
|             client.send(1729) | ||||
| 
 | ||||
|         key = b"" | ||||
| 
 | ||||
|         with self.connection.Listener(authkey=key) as listener: | ||||
|             threading.Thread(target=run, args=(listener.address, key)).start() | ||||
|             with listener.accept() as d: | ||||
|                 self.assertEqual(d.recv(), 1729) | ||||
| 
 | ||||
|         if self.TYPE == 'processes': | ||||
|             self.assertRaises(OSError, listener.accept) | ||||
| 
 | ||||
|     @unittest.skipUnless(util.abstract_sockets_supported, | ||||
|                          "test needs abstract socket support") | ||||
|     def test_abstract_socket(self): | ||||
|  |  | |||
|  | @ -0,0 +1,2 @@ | |||
| Fix :meth:`multiprocessing.connection.Listener.accept()` to accept empty bytes | ||||
| as authkey. Not accepting empty bytes as key causes it to hang indefinitely. | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Miguel Brito
						Miguel Brito