Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
4422-Handle-compressed-tar-file-padding.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 4422-Handle-compressed-tar-file-padding.patch of Package erlang
From a5892472a7b148546d9bbde186a73cfc9adc9f8c Mon Sep 17 00:00:00 2001 From: Simon Cornish <7t9jna402@sneakemail.com> Date: Mon, 3 Oct 2022 11:23:10 -0700 Subject: [PATCH 2/2] Handle compressed tar file padding --- lib/stdlib/src/erl_tar.erl | 17 +++++++++++++++-- lib/stdlib/test/tar_SUITE.erl | 15 +++++++++++++-- lib/stdlib/test/tar_SUITE_data/example_pad.tgz | Bin 0 -> 10240 bytes 3 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 lib/stdlib/test/tar_SUITE_data/example_pad.tgz diff --git a/lib/stdlib/src/erl_tar.erl b/lib/stdlib/src/erl_tar.erl index dbabcb14bf..da188c1bf1 100644 --- a/lib/stdlib/src/erl_tar.erl +++ b/lib/stdlib/src/erl_tar.erl @@ -324,10 +324,17 @@ do_open(Name, Mode) when is_list(Mode) -> open1({binary,Bin0}=Handle, read, _Raw, Opts) when is_binary(Bin0) -> Bin = case lists:member(compressed, Opts) of true -> + %% emulate file:open with Modes = [compressed_one ...] + Z = zlib:open(), + zlib:inflateInit(Z, 31, cut), try - zlib:gunzip(Bin0) + IoList = zlib:inflate(Z, Bin0), + zlib:inflateEnd(Z), + iolist_to_binary(IoList) catch _:_ -> Bin0 + after + zlib:close(Z) end; false -> Bin0 @@ -354,7 +361,13 @@ open1({file, Fd}=Handle, read, [raw], Opts) -> end; open1({file, _Fd}=Handle, read, [], _Opts) -> {error, {Handle, {incompatible_option, cooked}}}; -open1(Name, Access, Raw, Opts) when is_list(Name) or is_binary(Name) -> +open1(Name, Access, Raw, Opts0) when is_list(Name); is_binary(Name) -> + Opts = case lists:member(compressed, Opts0) andalso Access == read of + true -> + [compressed_one | (Opts0 -- [compressed])]; + false -> + Opts0 + end, case file:open(Name, Raw ++ [binary, Access|Opts]) of {ok, File} -> {ok, #reader{handle=File,access=Access,func=fun file_op/2}}; diff --git a/lib/stdlib/test/tar_SUITE.erl b/lib/stdlib/test/tar_SUITE.erl index 38b01354ae..294741574c 100644 --- a/lib/stdlib/test/tar_SUITE.erl +++ b/lib/stdlib/test/tar_SUITE.erl @@ -26,7 +26,7 @@ create_long_names/1, bad_tar/1, errors/1, extract_from_binary/1, extract_from_binary_compressed/1, extract_filtered/1, extract_from_open_file/1, symlinks/1, open_add_close/1, cooked_compressed/1, - memory/1,unicode/1,read_other_implementations/1, + memory/1,unicode/1,read_other_implementations/1,bsdtgz/1, sparse/1, init/1, leading_slash/1, dotdot/1, roundtrip_metadata/1, apply_file_info_opts/1, incompatible_options/1]). @@ -42,7 +42,7 @@ all() -> extract_from_binary_compressed, extract_from_open_file, extract_filtered, symlinks, open_add_close, cooked_compressed, memory, unicode, - read_other_implementations, + read_other_implementations, bsdtgz, sparse,init,leading_slash,dotdot,roundtrip_metadata, apply_file_info_opts,incompatible_options]. @@ -863,6 +863,17 @@ do_read_other_implementations([File|Rest], DataDir) -> {ok, _} = erl_tar:extract(Full, [memory]), do_read_other_implementations(Rest, DataDir). +%% test block padding with compressed tar from bsdtar or tape +bsdtgz(Config) when is_list(Config) -> + DataDir = proplists:get_value(data_dir, Config), + File = "example_pad.tgz", + Full = filename:join(DataDir, File), + io:format("~nTrying ~s", [File]), + Table = ["autofs.conf","rpc"], + {ok, Table} = erl_tar:table(Full, [compressed]), + {ok, Bin} = file:read_file(Full), + {ok, Table} = erl_tar:table({binary, Bin}, [compressed]), + verify_ports(Config). %% Test handling of sparse files sparse(Config) when is_list(Config) -> diff --git a/lib/stdlib/test/tar_SUITE_data/example_pad.tgz b/lib/stdlib/test/tar_SUITE_data/example_pad.tgz new file mode 100644 index 0000000000000000000000000000000000000000..508ab1b46105e150c89331827bbe9054606b40ae GIT binary patch literal 10240 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 P01yBK00BVY|486ps!5Hh literal 0 HcmV?d00001 -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor