#[derive(Clone, Debug)]
pub struct ZipOptions {
pub eocdr_locate_method: ZipLocateMethod,
pub validate_compressed_size_header_match: bool,
pub validate_uncompressed_size_header_match: bool,
pub validate_crc_header_match: bool,
pub validate_file_name_header_match: bool,
pub validate_compression_header_match: bool,
pub validate_num_cd_files: bool,
pub validate_crc_match_against_read: bool,
pub validate_uncompressed_size_match_against_read: bool,
pub validate_file_on_eof: bool,
pub validate_eor_is_eoa: bool,
pub validate_gpf_header_match: bool,
pub max_uncompressed_size_per_file: u64,
pub max_compressed_size_per_file: u64,
pub max_extra_field_size_per_file: u16,
pub max_extra_field_num_per_file: u16,
pub max_cd_num_files_load: u64,
pub max_cd_num_files: u64,
pub max_cd_size_in_bytes: u64,
}
impl Default for ZipOptions {
fn default() -> Self {
Self {
eocdr_locate_method: ZipLocateMethod::SeekBackReadLinearly,
validate_compressed_size_header_match: true,
validate_uncompressed_size_header_match: true,
validate_crc_header_match: true,
validate_file_name_header_match: true,
validate_compression_header_match: true,
validate_num_cd_files: true,
validate_crc_match_against_read: true,
validate_uncompressed_size_match_against_read: true,
validate_file_on_eof: true,
validate_gpf_header_match: true,
validate_eor_is_eoa: true,
max_uncompressed_size_per_file: u64::MAX,
max_compressed_size_per_file: u64::MAX,
max_cd_num_files: u64::MAX,
max_cd_size_in_bytes: u64::MAX,
max_cd_num_files_load: u64::MAX,
max_extra_field_size_per_file: u16::MAX,
max_extra_field_num_per_file: u16::MAX,
}
}
}
impl ZipOptions {
pub fn untrusted() -> Self {
Self {
max_uncompressed_size_per_file: 1024 * 1024 * 1024,
max_compressed_size_per_file: 1024 * 1024 * 1024,
max_extra_field_size_per_file: 4 * 1024,
max_extra_field_num_per_file: 16,
max_cd_num_files: 64 * 1024,
max_cd_num_files_load: 64 * 1024,
max_cd_size_in_bytes: 16 * 1024 * 1024,
..Default::default()
}
}
}
#[derive(Clone, Debug)]
#[non_exhaustive]
pub enum ZipLocateMethod {
SeekBackReadLinearly,
}