3838 zip64_central_headers /1 , unzip64_central_headers /1 ,
3939 zip64_central_directory /1 ,
4040 basic_timestamp /1 , extended_timestamp /1 , capped_timestamp /1 ,
41- uid_gid /1 ]).
41+ uid_gid /1 , zip_get_2_to_cwd / 1 ]).
4242
4343-export ([zip /5 , unzip /3 ]).
4444
@@ -57,7 +57,8 @@ all() ->
5757 zip_options , list_dir_options , aliases ,
5858 zip_api , open_leak , unzip_jar , compress_control , foldl ,
5959 unzip_traversal_exploit , fd_leak , unicode , test_zip_dir ,
60- explicit_file_info , {group , zip_group }, {group , zip64_group }].
60+ explicit_file_info , zip_get_2_to_cwd ,
61+ {group , zip_group }, {group , zip64_group }].
6162
6263groups () ->
6364 zip_groups ().
@@ -1292,6 +1293,25 @@ explicit_file_info(_Config) ->
12921293 {ok , _ } = zip :zip (" " , Files , [memory ]),
12931294 ok .
12941295
1296+ zip_get_2_to_cwd (Config ) ->
1297+ Files = [{" file.txt" , binary :copy (<<" txt" >>, 100 )},
1298+ {" file.zip" , binary :copy (<<" zip" >>, 100 )}],
1299+ CreateOpts = [memory , {uncompress , [" .zip" ]}],
1300+ {ok , {_ , ZipBin }} = zip :zip (" " , Files , CreateOpts ),
1301+
1302+ PrivDir = get_value (priv_dir , Config ),
1303+ {ok , ZipSrv } = zip :zip_open (ZipBin , [{cwd , PrivDir }]),
1304+
1305+ {ok , TxtFile } = zip :zip_get (" file.txt" , ZipSrv ),
1306+ {ok , <<" txt" , _ /binary >>} = file :read_file (TxtFile ),
1307+
1308+ {ok , ZipFile } = zip :zip_get (" file.zip" , ZipSrv ),
1309+ {ok , <<" zip" , _ /binary >>} = file :read_file (ZipFile ),
1310+
1311+ ok = zip :zip_close (ZipSrv ),
1312+
1313+ ok .
1314+
12951315mode (Config ) ->
12961316
12971317 PrivDir = get_value (pdir , Config ),
0 commit comments