add more info in invalid extra field warning

This commit is contained in:
Jean-Marie Mineau 2025-06-19 10:54:23 +02:00
parent 3a0b9bbf67
commit d5006f591c
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
2 changed files with 27 additions and 13 deletions

View file

@ -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;