@@ -172,7 +172,7 @@ pub(crate) mod zip_writer {
172172 /// ```
173173 pub struct ZipWriter < W : Write + Seek > {
174174 pub ( super ) inner : GenericZipWriter < W > ,
175- pub ( super ) files : IndexMap < Box < str > , ZipFileData > ,
175+ pub ( super ) files : IndexMap < Box < [ u8 ] > , ZipFileData > ,
176176 pub ( super ) stats : ZipWriterStats ,
177177 pub ( super ) writing_to_file : bool ,
178178 pub ( super ) writing_raw : bool ,
@@ -835,7 +835,6 @@ impl<A: Read + Write + Seek> ZipWriter<A> {
835835 pub fn new_append_with_config ( config : Config , mut readwriter : A ) -> ZipResult < ZipWriter < A > > {
836836 readwriter. seek ( SeekFrom :: Start ( 0 ) ) ?;
837837 let shared = ZipArchive :: get_metadata ( config, & mut readwriter) ?;
838-
839838 Ok ( ZipWriter {
840839 inner : GenericZipWriter :: Storer ( MaybeEncrypted :: Unencrypted ( readwriter) ) ,
841840 files : shared. files ,
@@ -873,11 +872,11 @@ impl<A: Read + Write + Seek> ZipWriter<A> {
873872 /// widely-compatible archive compared to [`Self::shallow_copy_file`]. Does not copy alignment.
874873 pub fn deep_copy_file ( & mut self , src_name : & str , dest_name : & str ) -> ZipResult < ( ) > {
875874 self . finish_file ( ) ?;
876- if src_name == dest_name || self . files . contains_key ( dest_name) {
875+ if src_name == dest_name || self . files . contains_key ( dest_name. as_bytes ( ) ) {
877876 return Err ( invalid ! ( "That file already exists" ) ) ;
878877 }
879878 let write_position = self . inner . try_inner_mut ( ) ?. stream_position ( ) ?;
880- let src_index = self . index_by_name ( src_name) ?;
879+ let src_index = self . index_by_name ( src_name. as_bytes ( ) ) ?;
881880 let src_data = & mut self . files [ src_index] ;
882881 let src_data_start = src_data. data_start ( self . inner . try_inner_mut ( ) ?) ?;
883882 debug_assert ! ( src_data_start <= write_position) ;
@@ -894,9 +893,8 @@ impl<A: Read + Write + Seek> ZipWriter<A> {
894893 . try_inner_mut ( ) ?
895894 . seek ( SeekFrom :: Start ( write_position) ) ?;
896895 let mut new_data = src_data. clone ( ) ;
897- let dest_name_raw = dest_name. as_bytes ( ) ;
896+ new_data . file_name_raw = dest_name. as_bytes ( ) . into ( ) ;
898897 new_data. file_name = dest_name. into ( ) ;
899- new_data. file_name_raw = dest_name_raw. into ( ) ;
900898 new_data. header_start = write_position;
901899 let extra_data_start = write_position
902900 + ( size_of :: < Magic > ( ) + size_of :: < ZipLocalEntryBlock > ( ) ) as u64
@@ -989,7 +987,6 @@ impl<A: Read + Write + Seek> ZipWriter<A> {
989987 let comment = mem:: take ( & mut self . comment ) ;
990988 let zip64_extensible_data_sector = mem:: take ( & mut self . zip64_extensible_data_sector ) ;
991989 let files = mem:: take ( & mut self . files ) ;
992-
993990 Ok ( ZipArchive :: from_finalized_writer (
994991 files,
995992 comment,
@@ -1381,10 +1378,10 @@ impl<W: Write + Seek> ZipWriter<W> {
13811378 }
13821379
13831380 fn insert_file_data ( & mut self , file : ZipFileData ) -> ZipResult < usize > {
1384- if self . files . contains_key ( & file. file_name ) {
1381+ if self . files . contains_key ( & file. file_name_raw ) {
13851382 return Err ( invalid ! ( "Duplicate filename: {}" , file. file_name) ) ;
13861383 }
1387- let ( index, _) = self . files . insert_full ( file. file_name . clone ( ) , file) ;
1384+ let ( index, _) = self . files . insert_full ( file. file_name_raw . clone ( ) , file) ;
13881385 Ok ( index)
13891386 }
13901387
@@ -1962,7 +1959,7 @@ impl<W: Write + Seek> ZipWriter<W> {
19621959 Ok ( central_start)
19631960 }
19641961
1965- fn index_by_name ( & self , name : & str ) -> ZipResult < usize > {
1962+ fn index_by_name ( & self , name : & [ u8 ] ) -> ZipResult < usize > {
19661963 self . files . get_index_of ( name) . ok_or ( ZipError :: FileNotFound )
19671964 }
19681965
@@ -1976,7 +1973,7 @@ impl<W: Write + Seek> ZipWriter<W> {
19761973 if src_name == dest_name {
19771974 return Err ( invalid ! ( "Trying to copy a file to itself" ) ) ;
19781975 }
1979- let src_index = self . index_by_name ( src_name) ?;
1976+ let src_index = self . index_by_name ( src_name. as_bytes ( ) ) ?;
19801977 let mut dest_data = self . files [ src_index] . clone ( ) ;
19811978 dest_data. file_name = dest_name. into ( ) ;
19821979 dest_data. file_name_raw = dest_name. as_bytes ( ) . into ( ) ;
0 commit comments