add more info in invalid extra field warning
This commit is contained in:
parent
3a0b9bbf67
commit
d5006f591c
2 changed files with 27 additions and 13 deletions
|
|
@ -4,7 +4,7 @@ use std::io::{SeekFrom, Write};
|
|||
use crate::compression::CompressionMethod;
|
||||
use crate::error::Error;
|
||||
use crate::extra_fields::{ExtraField, GenericExtraField, Zip64ExtraField};
|
||||
use crate::{Encoding, Signature, cp437, external_file_attributes, general_purpose_flags};
|
||||
use crate::{cp437, external_file_attributes, general_purpose_flags, Encoding, Signature};
|
||||
use androscalpel_serializer::{ReadSeek, Result, Serializable};
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
|
|
@ -136,8 +136,15 @@ impl Serializable for FileHeader {
|
|||
}
|
||||
}
|
||||
if extra_size_read > extra_field_length as usize {
|
||||
warn!("Failed to parse last extra field in {}", header.get_name());
|
||||
let size = header.extra_field.pop().unwrap().size();
|
||||
let last_extra = header.extra_field.pop().unwrap();
|
||||
let size = last_extra.size();
|
||||
warn!(
|
||||
"Failed to parse last extra field in {}, last field ({} bytes long) is {} bytes too long",
|
||||
header.get_name(),
|
||||
size,
|
||||
extra_size_read - extra_field_length as usize
|
||||
);
|
||||
//warn!("Forgetting last extra field: {:?}", last_extra);
|
||||
input.seek(SeekFrom::Current(-(size as i64))).unwrap();
|
||||
}
|
||||
let mut extra_size_read = input.stream_position().unwrap() - extra_field_off;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use log::warn;
|
|||
use crate::compression::CompressionMethod;
|
||||
use crate::error::Error;
|
||||
use crate::extra_fields::{ExtraField, GenericExtraField, Zip64ExtraField};
|
||||
use crate::{Encoding, Signature, cp437, general_purpose_flags};
|
||||
use crate::{cp437, general_purpose_flags, Encoding, Signature};
|
||||
use androscalpel_serializer::{ReadSeek, Result, Serializable};
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
|
|
@ -113,25 +113,32 @@ impl Serializable for LocalFileHeader {
|
|||
header.extra_field.push(field);
|
||||
}
|
||||
}
|
||||
let mut failed_last_extra_field = false;
|
||||
let mut failed_last_extra_field_data = None;
|
||||
if extra_size_read > extra_field_length as usize {
|
||||
//println!("Failed to parse last extra field in {}", header.get_name());
|
||||
failed_last_extra_field = true;
|
||||
let size = header.extra_field.pop().unwrap().size();
|
||||
input.seek(SeekFrom::Current(-(size as i64))).unwrap();
|
||||
failed_last_extra_field_data =
|
||||
Some((size, extra_size_read - extra_field_length as usize));
|
||||
}
|
||||
let mut extra_size_read = input.stream_position().unwrap() - extra_field_off;
|
||||
while extra_size_read < extra_field_length as u64 {
|
||||
header.malformed_extra_field.push(u8::deserialize(input)?);
|
||||
extra_size_read += 1;
|
||||
}
|
||||
// If it is not padding from zipalign
|
||||
if failed_last_extra_field
|
||||
&& header.malformed_extra_field != vec![0]
|
||||
&& header.malformed_extra_field != vec![0, 0]
|
||||
&& header.malformed_extra_field != vec![0, 0, 0]
|
||||
{
|
||||
warn!("Failed to parse last extra field in {}", header.get_name());
|
||||
if let Some((size, size_diff)) = failed_last_extra_field_data {
|
||||
// If it is not padding from zipalign
|
||||
if header.malformed_extra_field != vec![0]
|
||||
&& header.malformed_extra_field != vec![0, 0]
|
||||
&& header.malformed_extra_field != vec![0, 0, 0]
|
||||
{
|
||||
warn!(
|
||||
"Failed to parse last extra field in {}, last field ({} bytes long) is {} bytes too long",
|
||||
header.get_name(),
|
||||
size,
|
||||
size_diff
|
||||
);
|
||||
}
|
||||
}
|
||||
//input.seek(SeekFrom::Start(end_of_extra_field)).unwrap();
|
||||
for field in &mut header.extra_field {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue