Eliminate redundant name field in FileOperation for more efficient fuzzing

This commit is contained in:
Chris Hennick 2023-05-14 08:31:37 -07:00
parent 21ff795071
commit 0660141868
No known key found for this signature in database
GPG key ID: 25653935CC8B6C74

View file

@ -6,16 +6,10 @@ use arbitrary::Arbitrary;
use std::io::{Cursor, Read, Seek, Write}; use std::io::{Cursor, Read, Seek, Write};
use std::path::{PathBuf}; use std::path::{PathBuf};
#[derive(Arbitrary,Debug)]
pub struct File {
pub name: String,
pub contents: Vec<Vec<u8>>
}
#[derive(Arbitrary,Debug)] #[derive(Arbitrary,Debug)]
pub enum BasicFileOperation { pub enum BasicFileOperation {
WriteNormalFile { WriteNormalFile {
file: File, contents: Vec<Vec<u8>>,
options: zip_next::write::FileOptions, options: zip_next::write::FileOptions,
}, },
WriteDirectory(zip_next::write::FileOptions), WriteDirectory(zip_next::write::FileOptions),
@ -39,12 +33,12 @@ fn do_operation<T>(writer: &mut RefCell<zip_next::ZipWriter<T>>,
where T: Read + Write + Seek { where T: Read + Write + Seek {
let name = operation.name; let name = operation.name;
match operation.basic { match operation.basic {
BasicFileOperation::WriteNormalFile {file, mut options, ..} => { BasicFileOperation::WriteNormalFile {contents, mut options, ..} => {
if file.contents.iter().map(Vec::len).sum::<usize>() >= u32::MAX as usize { if contents.iter().map(Vec::len).sum::<usize>() >= u32::MAX as usize {
options = options.large_file(true); options = options.large_file(true);
} }
writer.borrow_mut().start_file(file.name.to_owned(), options)?; writer.borrow_mut().start_file(name, options)?;
for chunk in &file.contents { for chunk in contents {
writer.borrow_mut().write_all(chunk.as_slice())?; writer.borrow_mut().write_all(chunk.as_slice())?;
} }
} }