(self)
| 491 | return self.filename.encode('utf-8'), self.flag_bits | _MASK_UTF_FILENAME |
| 492 | |
| 493 | def _decodeExtra(self): |
| 494 | # Try to decode the extra field. |
| 495 | extra = self.extra |
| 496 | unpack = struct.unpack |
| 497 | while len(extra) >= 4: |
| 498 | tp, ln = unpack('<HH', extra[:4]) |
| 499 | if ln+4 > len(extra): |
| 500 | raise BadZipFile("Corrupt extra field %04x (size=%d)" % (tp, ln)) |
| 501 | if tp == 0x0001: |
| 502 | data = extra[4:ln+4] |
| 503 | # ZIP64 extension (large files and/or large archives) |
| 504 | try: |
| 505 | if self.file_size in (0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF): |
| 506 | field = "File size" |
| 507 | self.file_size, = unpack('<Q', data[:8]) |
| 508 | data = data[8:] |
| 509 | if self.compress_size == 0xFFFF_FFFF: |
| 510 | field = "Compress size" |
| 511 | self.compress_size, = unpack('<Q', data[:8]) |
| 512 | data = data[8:] |
| 513 | if self.header_offset == 0xFFFF_FFFF: |
| 514 | field = "Header offset" |
| 515 | self.header_offset, = unpack('<Q', data[:8]) |
| 516 | except struct.error: |
| 517 | raise BadZipFile(f"Corrupt zip64 extra field. " |
| 518 | f"{field} not found.") from None |
| 519 | |
| 520 | extra = extra[ln+4:] |
| 521 | |
| 522 | @classmethod |
| 523 | def from_file(cls, filename, arcname=None, *, strict_timestamps=True): |
no test coverage detected