wip
This commit is contained in:
parent
59d01d04db
commit
48817d1df8
6 changed files with 58 additions and 10 deletions
|
|
@ -1,12 +1,16 @@
|
|||
use log::warn;
|
||||
use std::collections::HashMap;
|
||||
use std::io::{Read, Seek, SeekFrom};
|
||||
|
||||
use crate::{
|
||||
apk_signing_block::ApkSigningBlock, apk_signing_block::Magic, compression::CompressionMethod,
|
||||
apk_signing_block::ApkSigningBlock,
|
||||
apk_signing_block::Magic,
|
||||
compression::CompressionMethod,
|
||||
data_descriptor::{DataDescriptor, DataDescriptor32, DataDescriptor64},
|
||||
end_of_central_directory::EndCentralDirectory,
|
||||
end_of_central_directory::Zip64EndCentralDirectory,
|
||||
end_of_central_directory::Zip64EndCentralDirectoryLocator, general_purpose_flags, FileHeader,
|
||||
FileInfo, LocalFileHeader, Signature,
|
||||
end_of_central_directory::Zip64EndCentralDirectoryLocator,
|
||||
general_purpose_flags, FileHeader, FileInfo, LocalFileHeader, Signature,
|
||||
};
|
||||
use androscalpel_serializer::Serializable;
|
||||
use flate2::read::DeflateDecoder;
|
||||
|
|
@ -80,18 +84,34 @@ impl<T: Read + Seek> ZipFileReader<T> {
|
|||
.seek(SeekFrom::Start(header.get_offset_local_header()))
|
||||
.unwrap();
|
||||
let local_header = LocalFileHeader::deserialize(&mut zip_file.data).unwrap();
|
||||
zip_file.data.seek(SeekFrom::Start(pos_in_dir)).unwrap();
|
||||
if (local_header.general_purpose_flags
|
||||
let data_descriptor = if (local_header.general_purpose_flags
|
||||
& general_purpose_flags::MASK_USE_DATA_DESCRIPTOR
|
||||
!= 0)
|
||||
|| (header.general_purpose_flags & general_purpose_flags::MASK_USE_DATA_DESCRIPTOR
|
||||
!= 0)
|
||||
{
|
||||
panic!("Data Descriptor not yet suported");
|
||||
}
|
||||
warn!("Data Descriptor not yet suported");
|
||||
zip_file
|
||||
.data
|
||||
.seek(SeekFrom::Current(header.compressed_size as i64))
|
||||
.unwrap();
|
||||
if zip_file.zip64_end_of_central_directory.is_some() {
|
||||
Some(DataDescriptor::Zip64(
|
||||
DataDescriptor64::deserialize(&mut zip_file.data).unwrap(),
|
||||
))
|
||||
} else {
|
||||
Some(DataDescriptor::Zip32(
|
||||
DataDescriptor32::deserialize(&mut zip_file.data).unwrap(),
|
||||
))
|
||||
}
|
||||
} else {
|
||||
None
|
||||
};
|
||||
zip_file.data.seek(SeekFrom::Start(pos_in_dir)).unwrap();
|
||||
zip_file.files.push(FileInfo {
|
||||
local_header,
|
||||
header,
|
||||
data_descriptor,
|
||||
});
|
||||
}
|
||||
assert_eq!(size_read, cd_size);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue