Skip to content

Commit

Permalink
Merge branch 'master' into bulk-parsing
Browse files Browse the repository at this point in the history
Signed-off-by: Chris Hennick <[email protected]>
  • Loading branch information
Pr0methean committed May 24, 2024
2 parents 326b2c4 + 294564c commit 6b19c87
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions src/write.rs
Original file line number Diff line number Diff line change
Expand Up @@ -784,7 +784,7 @@ impl<W: Write + Seek> ZipWriter<W> {
_ => (options.compression_method, None),
};

let file = ZipFileData::initialize_local_block(
let mut file = ZipFileData::initialize_local_block(
name,
&options,
raw_values,
Expand All @@ -795,8 +795,10 @@ impl<W: Write + Seek> ZipWriter<W> {
aes_mode,
extra_field,
);

let index = self.insert_file_data(file)?;
let version_needed = file.version_needed();
file.version_needed = version_needed;
file.version_made_by = file.version_made_by.max(version_needed as u8);
let index = self.insert_file_data(file)?;
let file = &mut self.files[index];
let writer = self.inner.get_plain();

Expand All @@ -813,7 +815,6 @@ impl<W: Write + Seek> ZipWriter<W> {
let _ = self.abort_file();
return Err(e);
}
}

// file name
writer.write_all(&file.file_name_raw)?;
Expand Down Expand Up @@ -1358,18 +1359,20 @@ impl<W: Write + Seek> ZipWriter<W> {
fn write_central_and_footer(&mut self) -> Result<u64, ZipError> {
let writer = self.inner.get_plain();

let mut version_needed = 10;
let central_start = writer.stream_position()?;
for file in self.files.values() {
write_central_directory_header(writer, file)?;
version_needed = version_needed.max(file.version_needed());
}
let central_size = writer.stream_position()? - central_start;

if self.files.len() > spec::ZIP64_ENTRY_THR
|| central_size.max(central_start) > spec::ZIP64_BYTES_THR
{
let zip64_footer = spec::Zip64CentralDirectoryEnd {
version_made_by: DEFAULT_VERSION as u16,
version_needed_to_extract: DEFAULT_VERSION as u16,
version_made_by: version_needed.max(DEFAULT_VERSION as u16),
version_needed_to_extract: version_needed,
disk_number: 0,
disk_with_central_directory: 0,
number_of_files_on_this_disk: self.files.len() as u64,
Expand Down Expand Up @@ -1763,10 +1766,8 @@ fn write_central_directory_header<T: Write>(writer: &mut T, file: &ZipFileData)
let mut zip64_extra_field = [0; 28];
let zip64_extra_field_length =
write_central_zip64_extra_field(&mut zip64_extra_field.as_mut(), file)?;

let block = file.block(zip64_extra_field_length);
block.write(writer)?;

// file name
writer.write_all(&file.file_name_raw)?;
// zip64 extra field
Expand Down

0 comments on commit 6b19c87

Please sign in to comment.