aboutsummaryrefslogtreecommitdiff
path: root/src/zip/file/read.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/zip/file/read.rs')
-rw-r--r--src/zip/file/read.rs17
1 files changed, 5 insertions, 12 deletions
diff --git a/src/zip/file/read.rs b/src/zip/file/read.rs
index 6ec7db7..7d683db 100644
--- a/src/zip/file/read.rs
+++ b/src/zip/file/read.rs
@@ -1,4 +1,5 @@
1use crate::driver::FileDriver; 1use crate::driver::FileDriver;
2use crate::utils::ReadUtils;
2use crate::zip::{CompressionMethod, ZipError, ZipFileInfo, ZipResult}; 3use crate::zip::{CompressionMethod, ZipError, ZipFileInfo, ZipResult};
3use bzip2::read::BzDecoder; 4use bzip2::read::BzDecoder;
4use flate2::read::DeflateDecoder; 5use flate2::read::DeflateDecoder;
@@ -35,11 +36,7 @@ impl<'d, Io: Read> FileDriver for ZipFileReader<'d, Io> {
35impl<'d, Io: Read + Seek> ZipFileReader<'d, Io> { 36impl<'d, Io: Read + Seek> ZipFileReader<'d, Io> {
36 pub fn new(io: &'d mut Io, info: &'d ZipFileInfo) -> ZipResult<Self> { 37 pub fn new(io: &'d mut Io, info: &'d ZipFileInfo) -> ZipResult<Self> {
37 io.seek(SeekFrom::Start(info.header_pointer))?; 38 io.seek(SeekFrom::Start(info.header_pointer))?;
38 let buf = { 39 let buf = io.read_arr::<30>()?;
39 let mut buf = [0; 30];
40 io.read(&mut buf)?;
41 buf
42 };
43 40
44 if u32::from_le_bytes(buf[..4].try_into().unwrap()) != 0x04034b50 { 41 if u32::from_le_bytes(buf[..4].try_into().unwrap()) != 0x04034b50 {
45 return Err(ZipError::InvalidFileHeaderSignature.into()); 42 return Err(ZipError::InvalidFileHeaderSignature.into());
@@ -56,12 +53,8 @@ impl<'d, Io: Read + Seek> ZipFileReader<'d, Io> {
56 CompressionMethod::Deflate => IoProxy::Deflate(DeflateDecoder::new(io)), 53 CompressionMethod::Deflate => IoProxy::Deflate(DeflateDecoder::new(io)),
57 CompressionMethod::BZip2 => IoProxy::BZip2(BzDecoder::new(io)), 54 CompressionMethod::BZip2 => IoProxy::BZip2(BzDecoder::new(io)),
58 CompressionMethod::Lzma => { 55 CompressionMethod::Lzma => {
59 let buf = { 56 let buf = io.read_arr::<9>()?;
60 let mut buf = [0; 9]; 57 cursor += 9;
61 io.read(&mut buf)?;
62 cursor += 9;
63 buf
64 };
65 IoProxy::Xz(XzDecoder::new_stream( 58 IoProxy::Xz(XzDecoder::new_stream(
66 io, 59 io,
67 Stream::new_raw_decoder( 60 Stream::new_raw_decoder(
@@ -71,7 +64,7 @@ impl<'d, Io: Read + Seek> ZipFileReader<'d, Io> {
71 .literal_position_bits((buf[4] / 9 % 5) as u32) 64 .literal_position_bits((buf[4] / 9 % 5) as u32)
72 .position_bits((buf[4] / 45) as u32) 65 .position_bits((buf[4] / 45) as u32)
73 .dict_size( 66 .dict_size(
74 u32::from_le_bytes(buf[5..9].try_into().unwrap()).min(4096), 67 u32::from_le_bytes(buf[5..9].try_into().unwrap()).max(4096),
75 ), 68 ),
76 ), 69 ),
77 ) 70 )