mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	bpo-34472: Add data descriptor signature to zipfile (GH-8871)
This makes streamed zips compatible with MacOS Archive Utility and other applications.
This commit is contained in:
		
							parent
							
								
									d0f49d2f50
								
							
						
					
					
						commit
						4ba3b50bfe
					
				
					 3 changed files with 8 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -159,6 +159,8 @@ class LargeZipFile(Exception):
 | 
			
		|||
_CD64_DIRECTORY_SIZE = 8
 | 
			
		||||
_CD64_OFFSET_START_CENTDIR = 9
 | 
			
		||||
 | 
			
		||||
_DD_SIGNATURE = 0x08074b50
 | 
			
		||||
 | 
			
		||||
_EXTRA_FIELD_STRUCT = struct.Struct('<HH')
 | 
			
		||||
 | 
			
		||||
def _strip_extra(extra, xids):
 | 
			
		||||
| 
						 | 
				
			
			@ -1118,8 +1120,8 @@ def close(self):
 | 
			
		|||
        # Write updated header info
 | 
			
		||||
        if self._zinfo.flag_bits & 0x08:
 | 
			
		||||
            # Write CRC and file sizes after the file data
 | 
			
		||||
            fmt = '<LQQ' if self._zip64 else '<LLL'
 | 
			
		||||
            self._fileobj.write(struct.pack(fmt, self._zinfo.CRC,
 | 
			
		||||
            fmt = '<LLQQ' if self._zip64 else '<LLLL'
 | 
			
		||||
            self._fileobj.write(struct.pack(fmt, _DD_SIGNATURE, self._zinfo.CRC,
 | 
			
		||||
                self._zinfo.compress_size, self._zinfo.file_size))
 | 
			
		||||
            self._zipfile.start_dir = self._fileobj.tell()
 | 
			
		||||
        else:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1468,6 +1468,7 @@ Roger D. Serwy
 | 
			
		|||
Jerry Seutter
 | 
			
		||||
Pete Sevander
 | 
			
		||||
Denis Severson
 | 
			
		||||
Silas Sewell
 | 
			
		||||
Ian Seyer
 | 
			
		||||
Dmitry Shachnev
 | 
			
		||||
Anish Shah
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
Improved compatibility for streamed files in :mod:`zipfile`. Previously an
 | 
			
		||||
optional signature was not being written and certain ZIP applications were
 | 
			
		||||
not supported. Patch by Silas Sewell.
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue