@@ -1449,7 +1449,7 @@ def repack(self, zfile, removed=None):
14491449 - Modifies the ZIP file in place.
14501450 - Updates zfile.start_dir to account for removed data.
14511451 - Sets zfile._didModify to True.
1452- - Adjusts header_offset and _end_offset of referenced ZipInfo
1452+ - Updates header_offset and _end_offset of referenced ZipInfo
14531453 instances.
14541454
14551455 Parameters:
@@ -1507,26 +1507,21 @@ def repack(self, zfile, removed=None):
15071507 used_entry_size = used_entry_size_list [i ]
15081508
15091509 # update the header and move entry data to the new position
1510+ old_header_offset = zinfo .header_offset
1511+ zinfo .header_offset -= entry_offset
1512+
15101513 if zinfo in removed_zinfos :
1511- old_header_offset = zinfo .header_offset
1512- zinfo .header_offset -= entry_offset
15131514 self ._copy_bytes (
15141515 fp ,
15151516 old_header_offset + used_entry_size ,
15161517 zinfo .header_offset ,
15171518 entry_size - used_entry_size
15181519 )
15191520
1520- if zinfo ._end_offset is not None :
1521- zinfo ._end_offset = zinfo .header_offset
1522-
15231521 # update entry_offset for subsequent files to follow
15241522 entry_offset += used_entry_size
15251523
15261524 else :
1527- old_header_offset = zinfo .header_offset
1528- zinfo .header_offset -= entry_offset
1529-
15301525 if entry_offset > 0 :
15311526 self ._copy_bytes (fp , old_header_offset , zinfo .header_offset , used_entry_size )
15321527
@@ -1550,13 +1545,19 @@ def repack(self, zfile, removed=None):
15501545 # update entry_offset for subsequent files to follow
15511546 entry_offset += stale_entry_size
15521547
1553- if zinfo ._end_offset is not None :
1554- zinfo ._end_offset = zinfo .header_offset + entry_size - stale_entry_size
1555-
15561548 # update state
15571549 zfile .start_dir -= entry_offset
15581550 zfile ._didModify = True
15591551
1552+ end_offset = zfile .start_dir
1553+ for zinfo in reversed (filelist ):
1554+ if zinfo in removed_zinfos :
1555+ zinfo ._end_offset = None
1556+ else :
1557+ if zinfo ._end_offset is not None :
1558+ zinfo ._end_offset = end_offset
1559+ end_offset = zinfo .header_offset
1560+
15601561 def _calc_initial_entry_offset (self , fp , data_offset ):
15611562 checked_offsets = {}
15621563 if data_offset > 0 :
0 commit comments