Bug fixes for Arbitrary impl
This commit is contained in:
parent
c79f734a11
commit
6e4d60e0ca
1 changed files with 13 additions and 12 deletions
25
src/write.rs
25
src/write.rs
|
@ -139,18 +139,18 @@ pub struct FileOptions {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(fuzzing)]
|
#[cfg(fuzzing)]
|
||||||
impl arbitrary::Arbitrary for FileOptions {
|
impl arbitrary::Arbitrary<'_> for FileOptions {
|
||||||
fn arbitrary(u: &mut Unstructured) -> arbitrary::Result<Self> {
|
fn arbitrary(u: &mut arbitrary::Unstructured) -> arbitrary::Result<Self> {
|
||||||
let mut options = FileOptions {
|
let mut options = FileOptions {
|
||||||
compression_method: CompressionMethod::arbitrary(&mut u)?,
|
compression_method: CompressionMethod::arbitrary(u)?,
|
||||||
compression_level: Option::<CompressionLevel>::arbitrary(&mut u)?,
|
compression_level: Option::<i32>::arbitrary(u)?,
|
||||||
last_modified_time: DateTime::arbitrary(&mut u)?,
|
last_modified_time: DateTime::arbitrary(u)?,
|
||||||
permissions: Option::<u32>::arbitrary(&mut u)?,
|
permissions: Option::<u32>::arbitrary(u)?,
|
||||||
large_file: bool::arbitrary(&mut u)?,
|
large_file: bool::arbitrary(u)?,
|
||||||
encrypt_with: Option::<ZipCryptoKeys>::arbitrary(&mut u)?,
|
encrypt_with: Option::<ZipCryptoKeys>::arbitrary(u)?,
|
||||||
extra_data: Vec::with_capacity(u16::MAX as usize),
|
extra_data: Vec::with_capacity(u16::MAX as usize),
|
||||||
central_extra_data: Vec::with_capacity(u16::MAX as usize),
|
central_extra_data: Vec::with_capacity(u16::MAX as usize),
|
||||||
alignment: u8::arbitrary(&mut u)? as u16 + 1,
|
alignment: u8::arbitrary(u)? as u16 + 1,
|
||||||
};
|
};
|
||||||
#[derive(arbitrary::Arbitrary)]
|
#[derive(arbitrary::Arbitrary)]
|
||||||
struct ExtraDataField {
|
struct ExtraDataField {
|
||||||
|
@ -158,10 +158,11 @@ impl arbitrary::Arbitrary for FileOptions {
|
||||||
data: Vec<u8>,
|
data: Vec<u8>,
|
||||||
central_only: bool,
|
central_only: bool,
|
||||||
}
|
}
|
||||||
let extra_data = Vec::<ExtraDataField>::arbitrary(&mut u)?;
|
let extra_data = Vec::<ExtraDataField>::arbitrary(u)?;
|
||||||
for field in extra_data {
|
for field in extra_data {
|
||||||
options.add_extra_data(field.header_id, field.data.as_slice(), field.central_only)
|
options
|
||||||
.map_err(|_| arbitrary::Error::IncorrectFormat);
|
.add_extra_data(field.header_id, field.data.as_slice(), field.central_only)
|
||||||
|
.map_err(|_| arbitrary::Error::IncorrectFormat)?;
|
||||||
}
|
}
|
||||||
Ok(options)
|
Ok(options)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue