Skip to content

Commit 580c570

Browse files
committed
Merge dmitrivereshchagin:stdlib/fix-zip-get-2
OTP-20298
2 parents ae1cfa6 + e8a733e commit 580c570

2 files changed

Lines changed: 23 additions & 3 deletions

File tree

lib/stdlib/src/zip.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1784,7 +1784,7 @@ do_openzip_get(F, #openzip{files = Files, in = In0, input = Input,
17841784
In1 = Input({seek, bof, Offset}, In0),
17851785
case get_z_file(In1, Z, Input, Output, [], fun silent/1,
17861786
CWD, ZFile, fun all/1, false, ExtraOpts) of
1787-
{file, R, _In2} -> {ok, R};
1787+
{file, R, _In2} -> {ok, Output(flush, R)};
17881788
_ -> throw(file_not_found)
17891789
end;
17901790
_ -> throw(file_not_found)

lib/stdlib/test/zip_SUITE.erl

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
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

6263
groups() ->
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+
12951315
mode(Config) ->
12961316

12971317
PrivDir = get_value(pdir, Config),

0 commit comments

Comments
 (0)