From 28208498429784f8ab9c62a12ddbf79ce8f19e4b Mon Sep 17 00:00:00 2001 From: Tolmachev Igor Date: Mon, 2 Sep 2024 19:54:34 +0300 Subject: Add struct size constants --- src/zip/driver.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/zip/driver.rs') diff --git a/src/zip/driver.rs b/src/zip/driver.rs index b44c453..31f86b6 100644 --- a/src/zip/driver.rs +++ b/src/zip/driver.rs @@ -4,7 +4,8 @@ use crate::zip::cp437::FromCp437; use crate::zip::datetime::DosDateTime; use crate::zip::structs::{ deserialize, AesField, Cdr, Eocdr, Eocdr64, Eocdr64Locator, ExtraHeader, CDR_SIGNATURE, - EOCDR64_LOCATOR_SIGNATURE, EOCDR64_SIGNATURE, EOCDR_SIGNATURE, + CDR_SIZE, EOCDR64_LOCATOR_SIGNATURE, EOCDR64_LOCATOR_SIZE, EOCDR64_SIGNATURE, EOCDR64_SIZE, + EOCDR_SIGNATURE, EOCDR_SIZE, }; use crate::zip::{ BitFlag, CompressionMethod, EncryptionMethod, ZipError, ZipFileInfo, ZipFileReader, @@ -91,7 +92,7 @@ impl ArchiveRead for Zip { // Read eocdr io.seek(SeekFrom::Start(eocdr_pos + 4))?; - let buf = io.read_arr::<18>()?; + let buf = io.read_arr::<{ EOCDR_SIZE - 4 }>()?; let eocdr: Eocdr = deserialize(&buf).unwrap(); let comment = String::from_cp437(io.read_vec(eocdr.comment_len as usize)?); @@ -102,7 +103,7 @@ impl ArchiveRead for Zip { // Try to find eocdr64locator if eocdr_pos >= 20 { io.seek(SeekFrom::Start(eocdr_pos - 20))?; - let buf = io.read_arr::<20>()?; + let buf = io.read_arr::()?; if buf[..4] == EOCDR64_LOCATOR_SIGNATURE { let locator: Eocdr64Locator = deserialize(&buf[4..]).unwrap(); @@ -116,7 +117,8 @@ impl ArchiveRead for Zip { return Err(ZipError::Overlapping("Eocdr64", "Eocdr64Locator")); } - let eocdr64: Eocdr64 = deserialize(&io.read_arr::<54>()?).unwrap(); + let eocdr64: Eocdr64 = + deserialize(&io.read_arr::<{ EOCDR64_SIZE - 4 }>()?).unwrap(); if locator.eocdr64_pointer + eocdr64.eocdr64_size + 32 > eocdr_pos { return Err(ZipError::Overlapping("Eocdr64", "Eocdr64Locator")); } @@ -148,7 +150,7 @@ impl ArchiveRead for Zip { if cd_reader.read_arr()? != CDR_SIGNATURE { return Err(ZipError::InvalidSignature("Cdr")); } - let cdr: Cdr = deserialize(&cd_reader.read_arr::<42>()?).unwrap(); + let cdr: Cdr = deserialize(&cd_reader.read_arr::<{ CDR_SIZE - 4 }>()?).unwrap(); let bit_flag = BitFlag::new(cdr.bit_flag); let name = cd_reader.read_vec(cdr.name_len as usize)?; -- cgit v1.2.3