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_DIRECTORY_SIZE = 8
 | 
				
			||||||
_CD64_OFFSET_START_CENTDIR = 9
 | 
					_CD64_OFFSET_START_CENTDIR = 9
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_DD_SIGNATURE = 0x08074b50
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_EXTRA_FIELD_STRUCT = struct.Struct('<HH')
 | 
					_EXTRA_FIELD_STRUCT = struct.Struct('<HH')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _strip_extra(extra, xids):
 | 
					def _strip_extra(extra, xids):
 | 
				
			||||||
| 
						 | 
					@ -1118,8 +1120,8 @@ def close(self):
 | 
				
			||||||
        # Write updated header info
 | 
					        # Write updated header info
 | 
				
			||||||
        if self._zinfo.flag_bits & 0x08:
 | 
					        if self._zinfo.flag_bits & 0x08:
 | 
				
			||||||
            # Write CRC and file sizes after the file data
 | 
					            # Write CRC and file sizes after the file data
 | 
				
			||||||
            fmt = '<LQQ' if self._zip64 else '<LLL'
 | 
					            fmt = '<LLQQ' if self._zip64 else '<LLLL'
 | 
				
			||||||
            self._fileobj.write(struct.pack(fmt, self._zinfo.CRC,
 | 
					            self._fileobj.write(struct.pack(fmt, _DD_SIGNATURE, self._zinfo.CRC,
 | 
				
			||||||
                self._zinfo.compress_size, self._zinfo.file_size))
 | 
					                self._zinfo.compress_size, self._zinfo.file_size))
 | 
				
			||||||
            self._zipfile.start_dir = self._fileobj.tell()
 | 
					            self._zipfile.start_dir = self._fileobj.tell()
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1468,6 +1468,7 @@ Roger D. Serwy
 | 
				
			||||||
Jerry Seutter
 | 
					Jerry Seutter
 | 
				
			||||||
Pete Sevander
 | 
					Pete Sevander
 | 
				
			||||||
Denis Severson
 | 
					Denis Severson
 | 
				
			||||||
 | 
					Silas Sewell
 | 
				
			||||||
Ian Seyer
 | 
					Ian Seyer
 | 
				
			||||||
Dmitry Shachnev
 | 
					Dmitry Shachnev
 | 
				
			||||||
Anish Shah
 | 
					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