From 9efec6b61fbfedd4109750f4699a3349ccb4f3bf Mon Sep 17 00:00:00 2001
From: Chris Hennick <hennickc@amazon.com>
Date: Wed, 10 May 2023 12:53:30 -0700
Subject: [PATCH] Fix merge

---
 src/write.rs     | 20 ++++++++------------
 src/zipcrypto.rs |  2 ++
 2 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/src/write.rs b/src/write.rs
index a5f47083..de5d9e23 100644
--- a/src/write.rs
+++ b/src/write.rs
@@ -475,8 +475,8 @@ impl<W: Write + Seek> ZipWriter<W> {
             self.stats.hasher = Hasher::new();
         }
         if let Some(keys) = options.encrypt_with {
-            let mut zipwriter = crate::zipcrypto::ZipCryptoWriter { writer: core::mem::replace(&mut self.inner, GenericZipWriter::Closed).unwrap(), buffer: vec![], keys };
-            let mut crypto_header = [0u8; 12];
+            let mut zipwriter = crate::zipcrypto::ZipCryptoWriter { writer: mem::replace(&mut self.inner, Closed).unwrap(), buffer: vec![], keys };
+            let crypto_header = [0u8; 12];
 
             zipwriter.write_all(&crypto_header)?;
             self.inner = Storer(MaybeEncrypted::Encrypted(zipwriter));
@@ -505,15 +505,9 @@ impl<W: Write + Seek> ZipWriter<W> {
             // Implicitly calling [`ZipWriter::end_extra_data`] for empty files.
             self.end_extra_data()?;
         }
-        let make_plain_writer = match self
+        let make_plain_writer = self
             .inner
-            .prepare_next_writer(CompressionMethod::Stored, None)? {
-            MaybeEncrypted::Encrypted(writer) => {
-                let crc32 = self.stats.hasher.clone().finalize();
-                self.inner = Storer(MaybeEncrypted::Unencrypted(writer.finish(crc32)?))
-            },
-            MaybeEncrypted::Unencrypted(writer) => writer
-        }
+            .prepare_next_writer(CompressionMethod::Stored, None)?;
         self.inner.switch_to(make_plain_writer)?;
         let writer = self.inner.get_plain();
 
@@ -1036,12 +1030,14 @@ impl<W: Write + Seek> Drop for ZipWriter<W> {
     }
 }
 
+type SwitchWriterFunction<W> = Box<dyn FnOnce(MaybeEncrypted<W>) -> GenericZipWriter<W>>;
+
 impl<W: Write + Seek> GenericZipWriter<W> {
     fn prepare_next_writer(
         &self,
         compression: CompressionMethod,
         compression_level: Option<i32>,
-    ) -> ZipResult<Box<dyn FnOnce(MaybeEncrypted<W>) -> GenericZipWriter<W>>> {
+    ) -> ZipResult<SwitchWriterFunction<W>> {
         if let Closed = self {
             return Err(
                 io::Error::new(io::ErrorKind::BrokenPipe, "ZipWriter was already closed").into(),
@@ -1121,7 +1117,7 @@ impl<W: Write + Seek> GenericZipWriter<W> {
 
     fn switch_to(
         &mut self,
-        make_new_self: Box<dyn FnOnce(MaybeEncrypted<W>) -> GenericZipWriter<W>>,
+        make_new_self: SwitchWriterFunction<W>,
     ) -> ZipResult<()> {
         let bare = match mem::replace(self, Closed) {
             Storer(w) => w,
diff --git a/src/zipcrypto.rs b/src/zipcrypto.rs
index 2e97a647..71af39e3 100644
--- a/src/zipcrypto.rs
+++ b/src/zipcrypto.rs
@@ -135,12 +135,14 @@ impl<R: std::io::Read> ZipCryptoReader<R> {
         Ok(Some(ZipCryptoReaderValid { reader: self }))
     }
 }
+#[allow(unused)]
 pub(crate) struct ZipCryptoWriter<W> {
     pub(crate) writer: W,
     pub(crate) buffer: Vec<u8>,
     pub(crate) keys: ZipCryptoKeys,
 }
 impl<W: std::io::Write> ZipCryptoWriter<W> {
+    #[allow(unused)]
     pub(crate) fn finish(mut self, crc32: u32) -> std::io::Result<W> {
         self.buffer[11] = (crc32 >> 24) as u8;
         for byte in self.buffer.iter_mut() {