MCPcopy Index your code
hub / github.com/python/cpython / _decodeExtra

Method _decodeExtra

Lib/zipfile/__init__.py:574–617  ·  view source on GitHub ↗
(self, filename_crc)

Source from the content-addressed store, hash-verified

572 return self.filename.encode('utf-8'), self.flag_bits | _MASK_UTF_FILENAME
573
574 def _decodeExtra(self, filename_crc):
575 # Try to decode the extra field.
576 extra = self.extra
577 unpack = struct.unpack
578 while len(extra) >= 4:
579 tp, ln = unpack('<HH', extra[:4])
580 if ln+4 > len(extra):
581 raise BadZipFile("Corrupt extra field %04x (size=%d)" % (tp, ln))
582 if tp == 0x0001:
583 data = extra[4:ln+4]
584 # ZIP64 extension (large files and/or large archives)
585 try:
586 if self.file_size in (0xFFFF_FFFF_FFFF_FFFF, 0xFFFF_FFFF):
587 field = "File size"
588 self.file_size, = unpack('<Q', data[:8])
589 data = data[8:]
590 if self.compress_size == 0xFFFF_FFFF:
591 field = "Compress size"
592 self.compress_size, = unpack('<Q', data[:8])
593 data = data[8:]
594 if self.header_offset == 0xFFFF_FFFF:
595 field = "Header offset"
596 self.header_offset, = unpack('<Q', data[:8])
597 except struct.error:
598 raise BadZipFile(f"Corrupt zip64 extra field. "
599 f"{field} not found.") from None
600 elif tp == 0x7075:
601 data = extra[4:ln+4]
602 # Unicode Path Extra Field
603 try:
604 up_version, up_name_crc = unpack('<BL', data[:5])
605 if up_version == 1 and up_name_crc == filename_crc:
606 up_unicode_name = data[5:].decode('utf-8')
607 if up_unicode_name:
608 self.filename = _sanitize_filename(up_unicode_name)
609 else:
610 import warnings
611 warnings.warn("Empty unicode path extra field (0x7075)", stacklevel=2)
612 except struct.error as e:
613 raise BadZipFile("Corrupt unicode path extra field (0x7075)") from e
614 except UnicodeDecodeError as e:
615 raise BadZipFile('Corrupt unicode path extra field (0x7075): invalid utf-8 bytes') from e
616
617 extra = extra[ln+4:]
618
619 @classmethod
620 def from_file(cls, filename, arcname=None, *, strict_timestamps=True):

Callers 1

_RealGetContentsMethod · 0.95

Calls 4

BadZipFileClass · 0.85
_sanitize_filenameFunction · 0.85
decodeMethod · 0.45
warnMethod · 0.45

Tested by

no test coverage detected