in openvid/zipstream.py [0:0]
def get_file(self, url: str, central_directory: bytes, offset: int):
struct_format = "<4sHHHHHHIIIHHHHHII"
struct_size = struct.calcsize(struct_format)
buffer = central_directory[offset : offset + struct_size]
if len(buffer) < struct_size:
return None, offset + struct_size
central_directory_file_header = CentralDirectoryFileHeader(*struct.unpack(struct_format, buffer))
filename = central_directory[
offset + struct_size : offset + struct_size + central_directory_file_header.file_name_length
].decode("utf-8")
next_offset = (
offset
+ struct_size
+ central_directory_file_header.file_name_length
+ central_directory_file_header.extra_field_length
+ central_directory_file_header.file_comment_length
)
if not filename:
return None, next_offset
is_zip64 = (central_directory_file_header.compressed_size == 2**32 - 1) or (
central_directory_file_header.relative_offset == 2**32 - 1
)
if is_zip64:
extra = central_directory[
offset + struct_size + central_directory_file_header.file_name_length : next_offset
]
central_directory_file_header.relative_offset = int.from_bytes(extra[-8:], byteorder="little")
return (
ZipStreamFile(
url=url,
filename=filename,
file_offset=central_directory_file_header.relative_offset,
file_size=central_directory_file_header.compressed_size,
),
next_offset,
)