@@ -207,6 +207,7 @@ impl ZipStreamFileMetadata {
207207mod  test { 
208208    use  super :: * ; 
209209    use  std:: collections:: BTreeSet ; 
210+     use  std:: fs:: remove_dir; 
210211    use  std:: io:: Cursor ; 
211212    use  crate :: write:: SimpleFileOptions ; 
212213    use  crate :: ZipWriter ; 
@@ -394,12 +395,23 @@ mod test {
394395        writer. add_symlink ( "a/" ,  "b/x/" ,  SimpleFileOptions :: default ( ) ) ?; 
395396        writer. add_symlink ( "b/" ,  "a/x/" ,  SimpleFileOptions :: default ( ) ) ?; 
396397        let  zipfile = writer. finish ( ) ?. into_inner ( ) ; 
397-         let  temp_dir = temp_dir ( ) ; 
398+         let  temp_dir = temp_dir ( ) . join ( "stream_symlink_loop" ) ; 
399+         create_dir ( & temp_dir) ?; 
398400        let  reader = ZipStreamReader :: new ( Cursor :: new ( & zipfile) ) ; 
399401        assert ! ( reader. extract( & temp_dir) . is_err( ) ) ; 
402+         let  _ = remove_dir ( temp_dir. join ( "a" ) ) ; 
403+         let  _ = remove_dir ( temp_dir. join ( "b" ) ) ; 
400404        create_dir ( temp_dir. join ( "a" ) ) ?; 
401405        let  reader = ZipStreamReader :: new ( Cursor :: new ( & zipfile) ) ; 
402406        assert ! ( reader. extract( & temp_dir) . is_err( ) ) ; 
407+         let  _ = remove_dir ( temp_dir. join ( "a" ) ) ; 
408+         let  _ = remove_dir ( temp_dir. join ( "b" ) ) ; 
409+         create_dir ( temp_dir. join ( "b" ) ) ?; 
410+         let  reader = ZipStreamReader :: new ( Cursor :: new ( & zipfile) ) ; 
411+         assert ! ( reader. extract( & temp_dir) . is_err( ) ) ; 
412+         let  _ = remove_dir ( temp_dir. join ( "a" ) ) ; 
413+         let  _ = remove_dir ( temp_dir. join ( "b" ) ) ; 
414+         create_dir ( temp_dir. join ( "a" ) ) ?; 
403415        create_dir ( temp_dir. join ( "b" ) ) ?; 
404416        let  reader = ZipStreamReader :: new ( Cursor :: new ( & zipfile) ) ; 
405417        assert ! ( reader. extract( & temp_dir) . is_err( ) ) ; 
0 commit comments