mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Bug #978833: Close https sockets by releasing the _ssl object.
This commit is contained in:
		
							parent
							
								
									ec2ce9bbae
								
							
						
					
					
						commit
						f25e35b9ec
					
				
					 4 changed files with 28 additions and 0 deletions
				
			
		|  | @ -1117,6 +1117,9 @@ def recv(self, len = 1024, flags = 0): | ||||||
|     def __getattr__(self, attr): |     def __getattr__(self, attr): | ||||||
|         return getattr(self._sock, attr) |         return getattr(self._sock, attr) | ||||||
| 
 | 
 | ||||||
|  |     def close(self): | ||||||
|  |         SharedSocketClient.close(self) | ||||||
|  |         self._ssl = None | ||||||
| 
 | 
 | ||||||
| class HTTPSConnection(HTTPConnection): | class HTTPSConnection(HTTPConnection): | ||||||
|     "This class allows communication via SSL." |     "This class allows communication via SSL." | ||||||
|  |  | ||||||
|  | @ -144,6 +144,10 @@ def _dummy(*args): | ||||||
|     send = recv = recv_into = sendto = recvfrom = recvfrom_into = _dummy |     send = recv = recv_into = sendto = recvfrom = recvfrom_into = _dummy | ||||||
|     __getattr__ = _dummy |     __getattr__ = _dummy | ||||||
| 
 | 
 | ||||||
|  | # Wrapper around platform socket objects. This implements | ||||||
|  | # a platform-independent dup() functionality. The | ||||||
|  | # implementation currently relies on reference counting | ||||||
|  | # to close the underlying socket object. | ||||||
| class _socketobject(object): | class _socketobject(object): | ||||||
| 
 | 
 | ||||||
|     __doc__ = _realsocket.__doc__ |     __doc__ = _realsocket.__doc__ | ||||||
|  |  | ||||||
|  | @ -106,6 +106,25 @@ def connector(): | ||||||
|         connector() |         connector() | ||||||
|         t.join() |         t.join() | ||||||
| 
 | 
 | ||||||
|  |     def test_978833(self): | ||||||
|  |         if test_support.verbose: | ||||||
|  |             print "test_978833 ..." | ||||||
|  | 
 | ||||||
|  |         import os, httplib | ||||||
|  |         with test_support.transient_internet(): | ||||||
|  |             s = socket.socket(socket.AF_INET) | ||||||
|  |             s.connect(("www.sf.net", 443)) | ||||||
|  |             fd = s._sock.fileno() | ||||||
|  |             sock = httplib.FakeSocket(s, socket.ssl(s)) | ||||||
|  |             s = None | ||||||
|  |             sock.close() | ||||||
|  |             try: | ||||||
|  |                 os.fstat(fd) | ||||||
|  |             except OSError: | ||||||
|  |                 pass | ||||||
|  |             else: | ||||||
|  |                 raise test_support.TestFailed("Failed to close socket") | ||||||
|  | 
 | ||||||
| class OpenSSLTests(unittest.TestCase): | class OpenSSLTests(unittest.TestCase): | ||||||
| 
 | 
 | ||||||
|     def testBasic(self): |     def testBasic(self): | ||||||
|  |  | ||||||
|  | @ -238,6 +238,8 @@ Core and builtins | ||||||
| Library | Library | ||||||
| ------- | ------- | ||||||
| 
 | 
 | ||||||
|  | - Bug #978833: Close https sockets by releasing the _ssl object. | ||||||
|  | 
 | ||||||
| - Change location of the package index to pypi.python.org/pypi | - Change location of the package index to pypi.python.org/pypi | ||||||
| 
 | 
 | ||||||
| - Bug #1701409: Fix a segfault in printing ctypes.c_char_p and | - Bug #1701409: Fix a segfault in printing ctypes.c_char_p and | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Martin v. Löwis
						Martin v. Löwis