From 9d9c1ce1f159f0536565320b600ad1f451cf9fa0 Mon Sep 17 00:00:00 2001 From: Chris Hennick <4961925+Pr0methean@users.noreply.github.com> Date: Fri, 14 Jun 2024 15:26:27 -0700 Subject: [PATCH] perf: Refactor extra-data validation --- src/write.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/write.rs b/src/write.rs index b74f72ac..8e80aa0c 100644 --- a/src/write.rs +++ b/src/write.rs @@ -954,7 +954,8 @@ impl ZipWriter { )?; } } - if extra_data.len() > 0 { + let extra_data_len = extra_data.len(); + if extra_data_len > 0 { writer.write_all(&extra_data)?; extra_data_end = writer.stream_position()?; debug_assert_eq!(extra_data_end % (options.alignment.max(1) as u64), 0); @@ -964,6 +965,11 @@ impl ZipWriter { } if let Some(data) = central_extra_data { ExtendedFileOptions::validate_extra_data(&data)?; + let central_extra_data_len = extra_data_len + data.len(); + if central_extra_data_len > u16::MAX as usize { + self.abort_file()?; + return Err(InvalidArchive("Central extra data would exceed 64 KiB")); + } file.central_extra_field = Some(data.clone()); } debug_assert!(file.data_start.get().is_none());