Update vendor/libarchive/dist to git fc6563f5130d8a7ee1fc27c0e55baef35119f26c
Libarchive 3.4.3 Relevant vendor changes: PR #1352: support negative zstd compression levels PR #1359: improve zstd version checking PR #1348: support RHT.security.selinux from GNU tar PR #1357: support for archives compressed with pzstd PR #1367: fix issues in acl tests PR #1372: child handling cleanup PR #1378: fix memory leak from passphrase callback
This commit is contained in:
parent
d0916f2d0d
commit
e117869ad3
@ -18,7 +18,7 @@ endif()
|
||||
# RelWithDebInfo : Release build with Debug Info
|
||||
# MinSizeRel : Release Min Size build
|
||||
IF(NOT CMAKE_BUILD_TYPE)
|
||||
SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Type" FORCE)
|
||||
SET(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build Type" FORCE)
|
||||
ENDIF(NOT CMAKE_BUILD_TYPE)
|
||||
# Set a value type to properly display CMAKE_BUILD_TYPE on GUI if the
|
||||
# value type is "UNINITIALIZED".
|
||||
@ -157,32 +157,32 @@ IF (MSVC)
|
||||
# This is added into CMAKE_C_FLAGS when CMAKE_BUILD_TYPE is "Debug"
|
||||
# Enable level 4 C4062: The enumerate has no associated handler in a switch
|
||||
# statement and there is no default that can catch it.
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4062")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /w14062")
|
||||
# Enable level 4 C4254: A larger bit field was assigned to a smaller bit
|
||||
# field.
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4254")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /w14254")
|
||||
# Enable level 4 C4295: An array was initialized but the last character in
|
||||
# the array is not a null; accessing the array may
|
||||
# produce unexpected results.
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4295")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /w14295")
|
||||
# Enable level 4 C4296: An unsigned variable was used in a comparison
|
||||
# operation with zero.
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4296")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /w14296")
|
||||
# Enable level 4 C4389: An operation involved signed and unsigned variables.
|
||||
# This could result in a loss of data.
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4389")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /w14389")
|
||||
# Enable level 4 C4505: The given function is local and not referenced in
|
||||
# the body of the module; therefore, the function is
|
||||
# dead code.
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4505")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /w14505")
|
||||
# Enable level 4 C4514: The optimizer removed an inline function that is not
|
||||
# called.
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4514")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /w14514")
|
||||
# Enable level 4 C4702: Unreachable code.
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4702")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /w14702")
|
||||
# Enable level 4 C4706: The test value in a conditional expression was the
|
||||
# result of an assignment.
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /we4706")
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /w14706")
|
||||
# /Oi option enables built-in functions.
|
||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Oi")
|
||||
#################################################################
|
||||
@ -1449,9 +1449,13 @@ CHECK_C_SOURCE_COMPILES(
|
||||
"#include <sys/sysmacros.h>\nint main() { return major(256); }"
|
||||
MAJOR_IN_SYSMACROS)
|
||||
|
||||
IF(ENABLE_LZMA)
|
||||
CHECK_C_SOURCE_COMPILES(
|
||||
"#include <lzma.h>\n#if LZMA_VERSION < 50020000\n#error unsupported\n#endif\nint main(void){lzma_stream_encoder_mt(0, 0); return 0;}"
|
||||
HAVE_LZMA_STREAM_ENCODER_MT)
|
||||
ELSE()
|
||||
SET(HAVE_LZMA_STREAM_ENCODER_MT 0)
|
||||
ENDIF(ENABLE_LZMA)
|
||||
|
||||
IF(HAVE_STRERROR_R)
|
||||
SET(HAVE_DECL_STRERROR_R 1)
|
||||
@ -2036,6 +2040,11 @@ IF(MSVC)
|
||||
ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
|
||||
ENDIF(MSVC)
|
||||
|
||||
IF(APPLE)
|
||||
# CC_MD5_Init() functions are deprecated on macOS 10.15, but we want to use them
|
||||
ADD_DEFINITIONS(-Wno-deprecated-declarations)
|
||||
ENDIF(APPLE)
|
||||
|
||||
IF(ENABLE_TEST)
|
||||
ADD_CUSTOM_TARGET(run_all_tests)
|
||||
ENDIF(ENABLE_TEST)
|
||||
|
@ -539,7 +539,8 @@ libarchive_test_SOURCES= \
|
||||
libarchive/test/test_read_format_zip_zip64.c \
|
||||
libarchive/test/test_read_format_zip_with_invalid_traditional_eocd.c \
|
||||
libarchive/test/test_read_large.c \
|
||||
libarchive/test/test_read_pax_schily_xattr.c \
|
||||
libarchive/test/test_read_pax_xattr_rht_security_selinux.c \
|
||||
libarchive/test/test_read_pax_xattr_schily.c \
|
||||
libarchive/test/test_read_pax_truncated.c \
|
||||
libarchive/test/test_read_position.c \
|
||||
libarchive/test/test_read_set_format.c \
|
||||
@ -701,6 +702,7 @@ libarchive_test_EXTRA_DIST=\
|
||||
libarchive/test/test_compat_zip_7.xps.uu \
|
||||
libarchive/test/test_compat_zip_8.zip.uu \
|
||||
libarchive/test/test_compat_zstd_1.tar.zst.uu \
|
||||
libarchive/test/test_compat_zstd_2.tar.zst.uu \
|
||||
libarchive/test/test_fuzz.cab.uu \
|
||||
libarchive/test/test_fuzz.lzh.uu \
|
||||
libarchive/test/test_fuzz_1.iso.Z.uu \
|
||||
@ -946,7 +948,8 @@ libarchive_test_EXTRA_DIST=\
|
||||
libarchive/test/test_read_large_splitted_rar_ac.uu \
|
||||
libarchive/test/test_read_large_splitted_rar_ad.uu \
|
||||
libarchive/test/test_read_large_splitted_rar_ae.uu \
|
||||
libarchive/test/test_read_pax_schily_xattr.tar.uu \
|
||||
libarchive/test/test_read_pax_xattr_rht_security_selinux.tar.uu \
|
||||
libarchive/test/test_read_pax_xattr_schily.tar.uu \
|
||||
libarchive/test/test_read_splitted_rar_aa.uu \
|
||||
libarchive/test/test_read_splitted_rar_ab.uu \
|
||||
libarchive/test/test_read_splitted_rar_ac.uu \
|
||||
|
6
NEWS
6
NEWS
@ -1,3 +1,9 @@
|
||||
May 20, 2020: libarchive 3.4.3 released
|
||||
|
||||
Apr 30, 2020: Support for pzstd compressed files
|
||||
|
||||
Apr 16, 2020: Support for RHT.security.selinux tar extended attribute
|
||||
|
||||
Feb 11, 2020: libarchive 3.4.2 released
|
||||
|
||||
Jan 23, 2020: Important fixes for writing XAR archives
|
||||
|
@ -70,7 +70,7 @@ know about any errors or omissions you find.
|
||||
|
||||
## Supported Formats
|
||||
|
||||
Currently, the library automatically detects and reads the following fomats:
|
||||
Currently, the library automatically detects and reads the following formats:
|
||||
* Old V7 tar archives
|
||||
* POSIX ustar
|
||||
* GNU tar format (including GNU long filenames, long link names, and sparse files)
|
||||
|
@ -1,7 +1,7 @@
|
||||
@ECHO OFF
|
||||
SET ZLIB_VERSION=1.2.11
|
||||
SET BZIP2_VERSION=b7a672291188a6469f71dd13ad14f2f9a7344fc8
|
||||
SET XZ_VERSION=292a5c0f9c9b3a66f5a5c652dc46381836d4537f
|
||||
SET XZ_VERSION=2327a461e1afce862c22269b80d3517801103c1b
|
||||
IF NOT "%BE%"=="mingw-gcc" (
|
||||
IF NOT "%BE%"=="msvc" (
|
||||
ECHO Environment variable BE must be mingw-gcc or msvc
|
||||
|
@ -24,10 +24,10 @@ ENDFOREACH()
|
||||
# thus there's a good chance it'll make some binutils versions unhappy...
|
||||
# This only affects Libs.private (looked up for static builds) though.
|
||||
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/build/pkgconfig/libarchive.pc.in
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/build/pkgconfig/libarchive.pc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/build/pkgconfig/libarchive.pc
|
||||
@ONLY)
|
||||
# And install it, of course ;).
|
||||
IF(ENABLE_INSTALL)
|
||||
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/build/pkgconfig/libarchive.pc
|
||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/build/pkgconfig/libarchive.pc
|
||||
DESTINATION "lib/pkgconfig")
|
||||
ENDIF()
|
||||
|
@ -1 +1 @@
|
||||
3004003dev
|
||||
3004003
|
||||
|
@ -4,7 +4,7 @@ dnl First, define all of the version numbers up front.
|
||||
dnl In particular, this allows the version macro to be used in AC_INIT
|
||||
|
||||
dnl These first two version numbers are updated automatically on each release.
|
||||
m4_define([LIBARCHIVE_VERSION_S],[3.4.3dev])
|
||||
m4_define([LIBARCHIVE_VERSION_S],[3.4.3])
|
||||
m4_define([LIBARCHIVE_VERSION_N],[3004003])
|
||||
|
||||
dnl bsdtar and bsdcpio versioning tracks libarchive
|
||||
|
BIN
contrib/oss-fuzz/corpus.zip
Normal file
BIN
contrib/oss-fuzz/corpus.zip
Normal file
Binary file not shown.
49
contrib/oss-fuzz/libarchive_fuzzer.cc
Normal file
49
contrib/oss-fuzz/libarchive_fuzzer.cc
Normal file
@ -0,0 +1,49 @@
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <vector>
|
||||
|
||||
#include "archive.h"
|
||||
|
||||
struct Buffer {
|
||||
const uint8_t *buf;
|
||||
size_t len;
|
||||
};
|
||||
|
||||
ssize_t reader_callback(struct archive *a, void *client_data,
|
||||
const void **block) {
|
||||
Buffer *buffer = reinterpret_cast<Buffer *>(client_data);
|
||||
*block = buffer->buf;
|
||||
ssize_t len = buffer->len;
|
||||
buffer->len = 0;
|
||||
return len;
|
||||
}
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) {
|
||||
int ret;
|
||||
ssize_t r;
|
||||
struct archive *a = archive_read_new();
|
||||
|
||||
archive_read_support_filter_all(a);
|
||||
archive_read_support_format_all(a);
|
||||
|
||||
Buffer buffer = {buf, len};
|
||||
archive_read_open(a, &buffer, NULL, reader_callback, NULL);
|
||||
|
||||
std::vector<uint8_t> data_buffer(getpagesize(), 0);
|
||||
struct archive_entry *entry;
|
||||
while(1) {
|
||||
ret = archive_read_next_header(a, &entry);
|
||||
if (ret == ARCHIVE_EOF || ret == ARCHIVE_FATAL)
|
||||
break;
|
||||
if (ret == ARCHIVE_RETRY)
|
||||
continue;
|
||||
while ((r = archive_read_data(a, data_buffer.data(),
|
||||
data_buffer.size())) > 0)
|
||||
;
|
||||
if (r == ARCHIVE_FATAL)
|
||||
break;
|
||||
}
|
||||
|
||||
archive_read_free(a);
|
||||
return 0;
|
||||
}
|
16
contrib/oss-fuzz/oss-fuzz-build.sh
Executable file
16
contrib/oss-fuzz/oss-fuzz-build.sh
Executable file
@ -0,0 +1,16 @@
|
||||
# build the project
|
||||
./build/autogen.sh
|
||||
./configure
|
||||
make -j$(nproc) all
|
||||
|
||||
# build seed
|
||||
cp $SRC/libarchive/contrib/oss-fuzz/corpus.zip\
|
||||
$OUT/libarchive_fuzzer_seed_corpus.zip
|
||||
|
||||
# build fuzzer(s)
|
||||
$CXX $CXXFLAGS -Ilibarchive \
|
||||
$SRC/libarchive/contrib/oss-fuzz/libarchive_fuzzer.cc \
|
||||
-o $OUT/libarchive_fuzzer $LIB_FUZZING_ENGINE \
|
||||
.libs/libarchive.a -Wl,-Bstatic -lbz2 -llzo2 \
|
||||
-lxml2 -llzma -lz -lcrypto -llz4 -licuuc \
|
||||
-licudata -Wl,-Bdynamic
|
@ -155,7 +155,7 @@ __LA_DECL int archive_version_number(void);
|
||||
/*
|
||||
* Textual name/version of the library, useful for version displays.
|
||||
*/
|
||||
#define ARCHIVE_VERSION_ONLY_STRING "3.4.3dev"
|
||||
#define ARCHIVE_VERSION_ONLY_STRING "3.4.3"
|
||||
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
|
||||
__LA_DECL const char * archive_version_string(void);
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -353,7 +353,7 @@ archive_entry_devminor(struct archive_entry *entry)
|
||||
return minor(entry->ae_stat.aest_dev);
|
||||
}
|
||||
|
||||
mode_t
|
||||
__LA_MODE_T
|
||||
archive_entry_filetype(struct archive_entry *entry)
|
||||
{
|
||||
return (AE_IFMT & entry->acl.mode);
|
||||
@ -525,7 +525,7 @@ archive_entry_ino64(struct archive_entry *entry)
|
||||
return (entry->ae_stat.aest_ino);
|
||||
}
|
||||
|
||||
mode_t
|
||||
__LA_MODE_T
|
||||
archive_entry_mode(struct archive_entry *entry)
|
||||
{
|
||||
return (entry->acl.mode);
|
||||
@ -598,7 +598,7 @@ _archive_entry_pathname_l(struct archive_entry *entry,
|
||||
return (archive_mstring_get_mbs_l(&entry->ae_pathname, p, len, sc));
|
||||
}
|
||||
|
||||
mode_t
|
||||
__LA_MODE_T
|
||||
archive_entry_perm(struct archive_entry *entry)
|
||||
{
|
||||
return (~AE_IFMT & entry->acl.mode);
|
||||
|
@ -215,9 +215,9 @@ and
|
||||
set and unset the size, respectively.
|
||||
.Pp
|
||||
The number of references (hardlinks) can be obtained by calling
|
||||
.Fn archive_entry_nlinks
|
||||
.Fn archive_entry_nlink
|
||||
and set with
|
||||
.Fn archive_entry_set_nlinks .
|
||||
.Fn archive_entry_set_nlink .
|
||||
.Ss Identifying unique files
|
||||
The functions
|
||||
.Fn archive_entry_dev
|
||||
|
@ -57,6 +57,10 @@ insert_passphrase_to_head(struct archive_read *a,
|
||||
{
|
||||
p->next = a->passphrases.first;
|
||||
a->passphrases.first = p;
|
||||
if (&a->passphrases.first == a->passphrases.last) {
|
||||
a->passphrases.last = &p->next;
|
||||
p->next = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static struct archive_read_passphrase *
|
||||
|
@ -1658,7 +1658,7 @@ static int
|
||||
setup_current_filesystem(struct archive_read_disk *a)
|
||||
{
|
||||
struct tree *t = a->tree;
|
||||
struct statvfs sfs;
|
||||
struct statvfs svfs;
|
||||
int r, xr = 0;
|
||||
|
||||
t->current_filesystem->synthetic = -1;
|
||||
@ -1667,16 +1667,16 @@ setup_current_filesystem(struct archive_read_disk *a)
|
||||
return (ARCHIVE_FAILED);
|
||||
}
|
||||
if (tree_current_is_symblic_link_target(t)) {
|
||||
r = statvfs(tree_current_access_path(t), &sfs);
|
||||
r = statvfs(tree_current_access_path(t), &svfs);
|
||||
if (r == 0)
|
||||
xr = get_xfer_size(t, -1, tree_current_access_path(t));
|
||||
} else {
|
||||
#ifdef HAVE_FSTATVFS
|
||||
r = fstatvfs(tree_current_dir_fd(t), &sfs);
|
||||
r = fstatvfs(tree_current_dir_fd(t), &svfs);
|
||||
if (r == 0)
|
||||
xr = get_xfer_size(t, tree_current_dir_fd(t), NULL);
|
||||
#else
|
||||
r = statvfs(".", &sfs);
|
||||
r = statvfs(".", &svfs);
|
||||
if (r == 0)
|
||||
xr = get_xfer_size(t, -1, ".");
|
||||
#endif
|
||||
@ -1688,30 +1688,30 @@ setup_current_filesystem(struct archive_read_disk *a)
|
||||
} else if (xr == 1) {
|
||||
/* Usually come here unless NetBSD supports _PC_REC_XFER_ALIGN
|
||||
* for pathconf() function. */
|
||||
t->current_filesystem->xfer_align = sfs.f_frsize;
|
||||
t->current_filesystem->xfer_align = svfs.f_frsize;
|
||||
t->current_filesystem->max_xfer_size = -1;
|
||||
#if defined(HAVE_STRUCT_STATVFS_F_IOSIZE)
|
||||
t->current_filesystem->min_xfer_size = sfs.f_iosize;
|
||||
t->current_filesystem->incr_xfer_size = sfs.f_iosize;
|
||||
t->current_filesystem->min_xfer_size = svfs.f_iosize;
|
||||
t->current_filesystem->incr_xfer_size = svfs.f_iosize;
|
||||
#else
|
||||
t->current_filesystem->min_xfer_size = sfs.f_bsize;
|
||||
t->current_filesystem->incr_xfer_size = sfs.f_bsize;
|
||||
t->current_filesystem->min_xfer_size = svfs.f_bsize;
|
||||
t->current_filesystem->incr_xfer_size = svfs.f_bsize;
|
||||
#endif
|
||||
}
|
||||
if (sfs.f_flag & ST_LOCAL)
|
||||
if (svfs.f_flag & ST_LOCAL)
|
||||
t->current_filesystem->remote = 0;
|
||||
else
|
||||
t->current_filesystem->remote = 1;
|
||||
|
||||
#if defined(ST_NOATIME)
|
||||
if (sfs.f_flag & ST_NOATIME)
|
||||
if (svfs.f_flag & ST_NOATIME)
|
||||
t->current_filesystem->noatime = 1;
|
||||
else
|
||||
#endif
|
||||
t->current_filesystem->noatime = 0;
|
||||
|
||||
/* Set maximum filename length. */
|
||||
t->current_filesystem->name_max = sfs.f_namemax;
|
||||
t->current_filesystem->name_max = svfs.f_namemax;
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
||||
@ -1840,7 +1840,7 @@ setup_current_filesystem(struct archive_read_disk *a)
|
||||
#if defined(HAVE_STATVFS)
|
||||
if (svfs.f_flag & ST_NOATIME)
|
||||
#else
|
||||
if (sfs.f_flag & ST_NOATIME)
|
||||
if (sfs.f_flags & ST_NOATIME)
|
||||
#endif
|
||||
t->current_filesystem->noatime = 1;
|
||||
else
|
||||
@ -1864,7 +1864,7 @@ static int
|
||||
setup_current_filesystem(struct archive_read_disk *a)
|
||||
{
|
||||
struct tree *t = a->tree;
|
||||
struct statvfs sfs;
|
||||
struct statvfs svfs;
|
||||
int r, xr = 0;
|
||||
|
||||
t->current_filesystem->synthetic = -1;/* Not supported */
|
||||
@ -1883,7 +1883,7 @@ setup_current_filesystem(struct archive_read_disk *a)
|
||||
"openat failed");
|
||||
return (ARCHIVE_FAILED);
|
||||
}
|
||||
r = fstatvfs(fd, &sfs);
|
||||
r = fstatvfs(fd, &svfs);
|
||||
if (r == 0)
|
||||
xr = get_xfer_size(t, fd, NULL);
|
||||
close(fd);
|
||||
@ -1892,13 +1892,13 @@ setup_current_filesystem(struct archive_read_disk *a)
|
||||
archive_set_error(&a->archive, errno, "fchdir failed");
|
||||
return (ARCHIVE_FAILED);
|
||||
}
|
||||
r = statvfs(tree_current_access_path(t), &sfs);
|
||||
r = statvfs(tree_current_access_path(t), &svfs);
|
||||
if (r == 0)
|
||||
xr = get_xfer_size(t, -1, tree_current_access_path(t));
|
||||
#endif
|
||||
} else {
|
||||
#ifdef HAVE_FSTATVFS
|
||||
r = fstatvfs(tree_current_dir_fd(t), &sfs);
|
||||
r = fstatvfs(tree_current_dir_fd(t), &svfs);
|
||||
if (r == 0)
|
||||
xr = get_xfer_size(t, tree_current_dir_fd(t), NULL);
|
||||
#else
|
||||
@ -1906,7 +1906,7 @@ setup_current_filesystem(struct archive_read_disk *a)
|
||||
archive_set_error(&a->archive, errno, "fchdir failed");
|
||||
return (ARCHIVE_FAILED);
|
||||
}
|
||||
r = statvfs(".", &sfs);
|
||||
r = statvfs(".", &svfs);
|
||||
if (r == 0)
|
||||
xr = get_xfer_size(t, -1, ".");
|
||||
#endif
|
||||
@ -1918,14 +1918,14 @@ setup_current_filesystem(struct archive_read_disk *a)
|
||||
return (ARCHIVE_FAILED);
|
||||
} else if (xr == 1) {
|
||||
/* pathconf(_PC_REX_*) operations are not supported. */
|
||||
t->current_filesystem->xfer_align = sfs.f_frsize;
|
||||
t->current_filesystem->xfer_align = svfs.f_frsize;
|
||||
t->current_filesystem->max_xfer_size = -1;
|
||||
t->current_filesystem->min_xfer_size = sfs.f_bsize;
|
||||
t->current_filesystem->incr_xfer_size = sfs.f_bsize;
|
||||
t->current_filesystem->min_xfer_size = svfs.f_bsize;
|
||||
t->current_filesystem->incr_xfer_size = svfs.f_bsize;
|
||||
}
|
||||
|
||||
#if defined(ST_NOATIME)
|
||||
if (sfs.f_flag & ST_NOATIME)
|
||||
if (svfs.f_flag & ST_NOATIME)
|
||||
t->current_filesystem->noatime = 1;
|
||||
else
|
||||
#endif
|
||||
@ -1933,7 +1933,7 @@ setup_current_filesystem(struct archive_read_disk *a)
|
||||
|
||||
#if defined(USE_READDIR_R)
|
||||
/* Set maximum filename length. */
|
||||
t->current_filesystem->name_max = sfs.f_namemax;
|
||||
t->current_filesystem->name_max = svfs.f_namemax;
|
||||
#endif
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
@ -400,7 +400,7 @@ __archive_read_program(struct archive_read_filter *self, const char *cmd)
|
||||
static const size_t out_buf_len = 65536;
|
||||
char *out_buf;
|
||||
const char *prefix = "Program: ";
|
||||
pid_t child;
|
||||
int ret;
|
||||
size_t l;
|
||||
|
||||
l = strlen(prefix) + strlen(cmd) + 1;
|
||||
@ -426,9 +426,9 @@ __archive_read_program(struct archive_read_filter *self, const char *cmd)
|
||||
state->out_buf = out_buf;
|
||||
state->out_buf_len = out_buf_len;
|
||||
|
||||
child = __archive_create_child(cmd, &state->child_stdin,
|
||||
&state->child_stdout);
|
||||
if (child == -1) {
|
||||
ret = __archive_create_child(cmd, &state->child_stdin,
|
||||
&state->child_stdout, &state->child);
|
||||
if (ret != ARCHIVE_OK) {
|
||||
free(state->out_buf);
|
||||
archive_string_free(&state->description);
|
||||
free(state);
|
||||
@ -437,21 +437,6 @@ __archive_read_program(struct archive_read_filter *self, const char *cmd)
|
||||
cmd);
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
state->child = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, child);
|
||||
if (state->child == NULL) {
|
||||
child_stop(self, state);
|
||||
free(state->out_buf);
|
||||
archive_string_free(&state->description);
|
||||
free(state);
|
||||
archive_set_error(&self->archive->archive, EINVAL,
|
||||
"Can't initialize filter; unable to run program \"%s\"",
|
||||
cmd);
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
#else
|
||||
state->child = child;
|
||||
#endif
|
||||
|
||||
self->data = state;
|
||||
self->read = program_filter_read;
|
||||
|
@ -119,6 +119,8 @@ zstd_bidder_bid(struct archive_read_filter_bidder *self,
|
||||
|
||||
/* Zstd frame magic values */
|
||||
const unsigned zstd_magic = 0xFD2FB528U;
|
||||
const unsigned zstd_magic_skippable_start = 0x184D2A50U;
|
||||
const unsigned zstd_magic_skippable_mask = 0xFFFFFFF0;
|
||||
|
||||
(void) self; /* UNUSED */
|
||||
|
||||
@ -129,6 +131,8 @@ zstd_bidder_bid(struct archive_read_filter_bidder *self,
|
||||
prefix = archive_le32dec(buffer);
|
||||
if (prefix == zstd_magic)
|
||||
return (32);
|
||||
if ((prefix & zstd_magic_skippable_mask) == zstd_magic_skippable_start)
|
||||
return (32);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
@ -3084,12 +3084,6 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
/* The program counter shouldn't reach here. */
|
||||
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
|
||||
"Unsupported block code: 0x%x", num);
|
||||
|
||||
return ARCHIVE_FATAL;
|
||||
}
|
||||
|
||||
return ARCHIVE_OK;
|
||||
|
@ -1796,6 +1796,16 @@ pax_attribute_schily_xattr(struct archive_entry *entry,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
pax_attribute_rht_security_selinux(struct archive_entry *entry,
|
||||
const char *value, size_t value_length)
|
||||
{
|
||||
archive_entry_xattr_add_entry(entry, "security.selinux",
|
||||
value, value_length);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
pax_attribute_acl(struct archive_read *a, struct tar *tar,
|
||||
struct archive_entry *entry, const char *value, int type)
|
||||
@ -1966,6 +1976,14 @@ pax_attribute(struct archive_read *a, struct tar *tar,
|
||||
if (memcmp(key, "LIBARCHIVE.xattr.", 17) == 0)
|
||||
pax_attribute_xattr(entry, key, value);
|
||||
break;
|
||||
case 'R':
|
||||
/* GNU tar uses RHT.security header to store SELinux xattrs
|
||||
* SCHILY.xattr.security.selinux == RHT.security.selinux */
|
||||
if (strcmp(key, "RHT.security.selinux") == 0) {
|
||||
pax_attribute_rht_security_selinux(entry, value,
|
||||
value_length);
|
||||
}
|
||||
break;
|
||||
case 'S':
|
||||
/* We support some keys used by the "star" archiver */
|
||||
if (strcmp(key, "SCHILY.acl.access") == 0) {
|
||||
|
@ -196,10 +196,6 @@ __archive_write_program_free(struct archive_write_program_data *data)
|
||||
{
|
||||
|
||||
if (data) {
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
if (data->child)
|
||||
CloseHandle(data->child);
|
||||
#endif
|
||||
free(data->program_name);
|
||||
free(data->child_buf);
|
||||
free(data);
|
||||
@ -211,7 +207,7 @@ int
|
||||
__archive_write_program_open(struct archive_write_filter *f,
|
||||
struct archive_write_program_data *data, const char *cmd)
|
||||
{
|
||||
pid_t child;
|
||||
int ret;
|
||||
|
||||
if (data->child_buf == NULL) {
|
||||
data->child_buf_len = 65536;
|
||||
@ -225,27 +221,13 @@ __archive_write_program_open(struct archive_write_filter *f,
|
||||
}
|
||||
}
|
||||
|
||||
child = __archive_create_child(cmd, &data->child_stdin,
|
||||
&data->child_stdout);
|
||||
if (child == -1) {
|
||||
ret = __archive_create_child(cmd, &data->child_stdin,
|
||||
&data->child_stdout, &data->child);
|
||||
if (ret != ARCHIVE_OK) {
|
||||
archive_set_error(f->archive, EINVAL,
|
||||
"Can't launch external program: %s", cmd);
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
data->child = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, child);
|
||||
if (data->child == NULL) {
|
||||
close(data->child_stdin);
|
||||
data->child_stdin = -1;
|
||||
close(data->child_stdout);
|
||||
data->child_stdout = -1;
|
||||
archive_set_error(f->archive, EINVAL,
|
||||
"Can't launch external program: %s", cmd);
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
#else
|
||||
data->child = child;
|
||||
#endif
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
||||
|
@ -59,6 +59,16 @@ struct private_data {
|
||||
#endif
|
||||
};
|
||||
|
||||
/* If we don't have the library use default range values (zstdcli.c v1.4.0) */
|
||||
#define CLEVEL_MIN -99
|
||||
#define CLEVEL_STD_MIN 0 /* prior to 1.3.4 and more recent without using --fast */
|
||||
#define CLEVEL_DEFAULT 3
|
||||
#define CLEVEL_STD_MAX 19 /* without using --ultra */
|
||||
#define CLEVEL_MAX 22
|
||||
|
||||
#define MINVER_NEGCLEVEL 10304
|
||||
#define MINVER_MINCLEVEL 10306
|
||||
|
||||
static int archive_compressor_zstd_options(struct archive_write_filter *,
|
||||
const char *, const char *);
|
||||
static int archive_compressor_zstd_open(struct archive_write_filter *);
|
||||
@ -96,7 +106,7 @@ archive_write_add_filter_zstd(struct archive *_a)
|
||||
f->free = &archive_compressor_zstd_free;
|
||||
f->code = ARCHIVE_FILTER_ZSTD;
|
||||
f->name = "zstd";
|
||||
data->compression_level = 3; /* Default level used by the zstd CLI */
|
||||
data->compression_level = CLEVEL_DEFAULT;
|
||||
#if HAVE_ZSTD_H && HAVE_LIBZSTD
|
||||
data->cstream = ZSTD_createCStream();
|
||||
if (data->cstream == NULL) {
|
||||
@ -135,6 +145,31 @@ archive_compressor_zstd_free(struct archive_write_filter *f)
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
||||
static int string_is_numeric (const char* value)
|
||||
{
|
||||
size_t len = strlen(value);
|
||||
size_t i;
|
||||
|
||||
if (len == 0) {
|
||||
return (ARCHIVE_WARN);
|
||||
}
|
||||
else if (len == 1 && !(value[0] >= '0' && value[0] <= '9')) {
|
||||
return (ARCHIVE_WARN);
|
||||
}
|
||||
else if (!(value[0] >= '0' && value[0] <= '9') &&
|
||||
value[0] != '-' && value[0] != '+') {
|
||||
return (ARCHIVE_WARN);
|
||||
}
|
||||
|
||||
for (i = 1; i < len; i++) {
|
||||
if (!(value[i] >= '0' && value[i] <= '9')) {
|
||||
return (ARCHIVE_WARN);
|
||||
}
|
||||
}
|
||||
|
||||
return (ARCHIVE_OK);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set write options.
|
||||
*/
|
||||
@ -146,12 +181,25 @@ archive_compressor_zstd_options(struct archive_write_filter *f, const char *key,
|
||||
|
||||
if (strcmp(key, "compression-level") == 0) {
|
||||
int level = atoi(value);
|
||||
#if HAVE_ZSTD_H && HAVE_LIBZSTD
|
||||
if (level < 1 || level > ZSTD_maxCLevel()) {
|
||||
#else
|
||||
/* If we don't have the library, hard-code the max level */
|
||||
if (level < 1 || level > 22) {
|
||||
int minimum = CLEVEL_MIN;
|
||||
int maximum = CLEVEL_MAX;
|
||||
if (string_is_numeric(value) != ARCHIVE_OK) {
|
||||
return (ARCHIVE_WARN);
|
||||
}
|
||||
#if HAVE_ZSTD_H && HAVE_LIBZSTD
|
||||
maximum = ZSTD_maxCLevel();
|
||||
#if ZSTD_VERSION_NUMBER >= MINVER_MINCLEVEL
|
||||
if (ZSTD_versionNumber() >= MINVER_MINCLEVEL) {
|
||||
minimum = ZSTD_minCLevel();
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (ZSTD_versionNumber() < MINVER_NEGCLEVEL) {
|
||||
minimum = CLEVEL_STD_MIN;
|
||||
}
|
||||
#endif
|
||||
if (level < minimum || level > maximum) {
|
||||
return (ARCHIVE_WARN);
|
||||
}
|
||||
data->compression_level = level;
|
||||
@ -297,7 +345,26 @@ archive_compressor_zstd_open(struct archive_write_filter *f)
|
||||
int r;
|
||||
|
||||
archive_string_init(&as);
|
||||
archive_string_sprintf(&as, "zstd -%d", data->compression_level);
|
||||
/* --no-check matches library default */
|
||||
archive_strcpy(&as, "zstd --no-check");
|
||||
|
||||
if (data->compression_level < CLEVEL_STD_MIN) {
|
||||
struct archive_string as2;
|
||||
archive_string_init(&as2);
|
||||
archive_string_sprintf(&as2, " --fast=%d", -data->compression_level);
|
||||
archive_string_concat(&as, &as2);
|
||||
archive_string_free(&as2);
|
||||
} else {
|
||||
struct archive_string as2;
|
||||
archive_string_init(&as2);
|
||||
archive_string_sprintf(&as2, " -%d", data->compression_level);
|
||||
archive_string_concat(&as, &as2);
|
||||
archive_string_free(&as2);
|
||||
}
|
||||
|
||||
if (data->compression_level > CLEVEL_STD_MAX) {
|
||||
archive_strcat(&as, " --ultra");
|
||||
}
|
||||
|
||||
f->write = archive_compressor_zstd_write;
|
||||
r = __archive_write_program_open(f, data->pdata, as.s);
|
||||
|
@ -255,7 +255,8 @@ If supported, the default value is read from
|
||||
.Bl -tag -compact -width indent
|
||||
.It Cm compression-level
|
||||
The value is interpreted as a decimal integer specifying the
|
||||
compression level. Supported values are from 1 to 22.
|
||||
compression level. Supported values depend on the library version,
|
||||
common values are from 1 to 22.
|
||||
.El
|
||||
.It Format 7zip
|
||||
.Bl -tag -compact -width indent
|
||||
|
@ -32,8 +32,13 @@
|
||||
#error This header is only to be used internally to libarchive.
|
||||
#endif
|
||||
|
||||
pid_t
|
||||
__archive_create_child(const char *cmd, int *child_stdin, int *child_stdout);
|
||||
int
|
||||
__archive_create_child(const char *cmd, int *child_stdin, int *child_stdout,
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
HANDLE *out_child);
|
||||
#else
|
||||
pid_t *out_child);
|
||||
#endif
|
||||
|
||||
void
|
||||
__archive_check_child(int in, int out);
|
||||
|
@ -72,8 +72,9 @@ __FBSDID("$FreeBSD: head/lib/libarchive/filter_fork.c 182958 2008-09-12 05:33:00
|
||||
|
||||
#include "filter_fork.h"
|
||||
|
||||
pid_t
|
||||
__archive_create_child(const char *cmd, int *child_stdin, int *child_stdout)
|
||||
int
|
||||
__archive_create_child(const char *cmd, int *child_stdin, int *child_stdout,
|
||||
pid_t *out_child)
|
||||
{
|
||||
pid_t child;
|
||||
int stdin_pipe[2], stdout_pipe[2], tmp;
|
||||
@ -177,7 +178,8 @@ __archive_create_child(const char *cmd, int *child_stdin, int *child_stdout)
|
||||
fcntl(*child_stdout, F_SETFL, O_NONBLOCK);
|
||||
__archive_cmdline_free(cmdline);
|
||||
|
||||
return child;
|
||||
*out_child = child;
|
||||
return ARCHIVE_OK;
|
||||
|
||||
#if HAVE_POSIX_SPAWNP
|
||||
actions_inited:
|
||||
@ -192,7 +194,7 @@ __archive_create_child(const char *cmd, int *child_stdin, int *child_stdout)
|
||||
close(stdin_pipe[1]);
|
||||
state_allocated:
|
||||
__archive_cmdline_free(cmdline);
|
||||
return -1;
|
||||
return ARCHIVE_FAILED;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -31,8 +31,9 @@
|
||||
|
||||
#include "filter_fork.h"
|
||||
|
||||
pid_t
|
||||
__archive_create_child(const char *cmd, int *child_stdin, int *child_stdout)
|
||||
int
|
||||
__archive_create_child(const char *cmd, int *child_stdin, int *child_stdout,
|
||||
HANDLE *out_child)
|
||||
{
|
||||
HANDLE childStdout[2], childStdin[2],childStderr;
|
||||
SECURITY_ATTRIBUTES secAtts;
|
||||
@ -44,6 +45,7 @@ __archive_create_child(const char *cmd, int *child_stdin, int *child_stdout)
|
||||
char *arg0, *ext;
|
||||
int i, l;
|
||||
DWORD fl, fl_old;
|
||||
HANDLE child;
|
||||
|
||||
childStdout[0] = childStdout[1] = INVALID_HANDLE_VALUE;
|
||||
childStdin[0] = childStdin[1] = INVALID_HANDLE_VALUE;
|
||||
@ -154,13 +156,20 @@ __archive_create_child(const char *cmd, int *child_stdin, int *child_stdout)
|
||||
*child_stdout = _open_osfhandle((intptr_t)childStdout[0], _O_RDONLY);
|
||||
*child_stdin = _open_osfhandle((intptr_t)childStdin[1], _O_WRONLY);
|
||||
|
||||
child = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE,
|
||||
childInfo.dwProcessId);
|
||||
if (child == NULL) // INVALID_HANDLE_VALUE ?
|
||||
goto fail;
|
||||
|
||||
*out_child = child;
|
||||
|
||||
CloseHandle(childStdout[1]);
|
||||
CloseHandle(childStdin[0]);
|
||||
|
||||
archive_string_free(&cmdline);
|
||||
archive_string_free(&fullpath);
|
||||
__archive_cmdline_free(acmd);
|
||||
return (childInfo.dwProcessId);
|
||||
return ARCHIVE_OK;
|
||||
|
||||
fail:
|
||||
if (childStdout[0] != INVALID_HANDLE_VALUE)
|
||||
@ -176,7 +185,7 @@ __archive_create_child(const char *cmd, int *child_stdin, int *child_stdout)
|
||||
archive_string_free(&cmdline);
|
||||
archive_string_free(&fullpath);
|
||||
__archive_cmdline_free(acmd);
|
||||
return (-1);
|
||||
return ARCHIVE_FAILED;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -191,7 +191,8 @@ IF(ENABLE_TEST)
|
||||
test_read_format_zip_zip64.c
|
||||
test_read_format_zip_with_invalid_traditional_eocd.c
|
||||
test_read_large.c
|
||||
test_read_pax_schily_xattr.c
|
||||
test_read_pax_xattr_rht_security_selinux.c
|
||||
test_read_pax_xattr_schily.c
|
||||
test_read_pax_truncated.c
|
||||
test_read_position.c
|
||||
test_read_set_format.c
|
||||
|
@ -634,9 +634,11 @@ acl_match(acl_entry_t aclent, struct myacl_t *myacl)
|
||||
case ACL_ENTRY_TYPE_AUDIT:
|
||||
if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_AUDIT)
|
||||
return (0);
|
||||
break;
|
||||
case ACL_ENTRY_TYPE_ALARM:
|
||||
if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_ALARM)
|
||||
return (0);
|
||||
break;
|
||||
default:
|
||||
return (0);
|
||||
}
|
||||
|
@ -364,8 +364,8 @@ DEFINE_TEST(test_acl_platform_posix1e_read)
|
||||
struct archive *a;
|
||||
struct archive_entry *ae;
|
||||
int n, fd, flags, dflags;
|
||||
char *func, *acl_text;
|
||||
const char *acl1_text, *acl2_text, *acl3_text;
|
||||
char *acl_text;
|
||||
const char *func, *acl1_text, *acl2_text, *acl3_text;
|
||||
#if ARCHIVE_ACL_SUNOS
|
||||
void *aclp;
|
||||
int aclcnt;
|
||||
|
@ -79,4 +79,7 @@ DEFINE_TEST(test_compat_zstd)
|
||||
/* This sample was compressed as 3 separate streams with a zstd skippable
|
||||
* frame placed in the middle */
|
||||
compat_zstd("test_compat_zstd_1.tar.zst");
|
||||
|
||||
/* The same sample compressed with pzstd */
|
||||
compat_zstd("test_compat_zstd_2.tar.zst");
|
||||
}
|
||||
|
8
libarchive/test/test_compat_zstd_2.tar.zst.uu
Normal file
8
libarchive/test/test_compat_zstd_2.tar.zst.uu
Normal file
@ -0,0 +1,8 @@
|
||||
begin 664 test_compat_zstd_2.tar.zst
|
||||
M4"I-&`0```"J````*+4O_018[00`\L41%I`I!%(KMV]N7BR&@9(I29\:P8D9
|
||||
ML"GMK=GZS(ZZ!!ZT[%K7J3*`"W$0PR(Y((0".0A!DE`,:6K4D_ZNQG_J=DP.
|
||||
M&<:1G$L?`/U!!?M`/3*@&,!$`:C[!RHC`TH`#!.`8O]`%61`!UAQ`E"Z#U1&
|
||||
M!E0#@C0`=?Q`961`"<#N`;(9'$PC'ZA$`A16ZL#%$IP``!*"=UWAE$]@"$B5
|
||||
"Q>,`
|
||||
`
|
||||
end
|
62
libarchive/test/test_read_pax_xattr_rht_security_selinux.c
Normal file
62
libarchive/test/test_read_pax_xattr_rht_security_selinux.c
Normal file
@ -0,0 +1,62 @@
|
||||
/*-
|
||||
* Copyright (c) 2016 IBM Corporation
|
||||
* Copyright (c) 2003-2007 Tim Kientzle
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This test case's code has been derived from test_entry.c
|
||||
*/
|
||||
#include "test.h"
|
||||
|
||||
DEFINE_TEST(test_read_pax_xattr_rht_security_selinux)
|
||||
{
|
||||
struct archive *a;
|
||||
struct archive_entry *ae;
|
||||
const char *refname = "test_read_pax_xattr_rht_security_selinux.tar";
|
||||
const char *xname; /* For xattr tests. */
|
||||
const void *xval; /* For xattr tests. */
|
||||
size_t xsize; /* For xattr tests. */
|
||||
const char *string;
|
||||
|
||||
assert((a = archive_read_new()) != NULL);
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
|
||||
|
||||
extract_reference_file(refname);
|
||||
assertEqualIntA(a, ARCHIVE_OK,
|
||||
archive_read_open_filename(a, refname, 10240));
|
||||
|
||||
assertEqualInt(ARCHIVE_OK, archive_read_next_header(a, &ae));
|
||||
assertEqualInt(1, archive_entry_xattr_count(ae));
|
||||
assertEqualInt(1, archive_entry_xattr_reset(ae));
|
||||
|
||||
assertEqualInt(0, archive_entry_xattr_next(ae, &xname, &xval, &xsize));
|
||||
assertEqualString(xname, "security.selinux");
|
||||
string = "system_u:object_r:admin_home_t:s0";
|
||||
assertEqualMem(xval, string, xsize);
|
||||
assertEqualInt((int)xsize, strlen(string));
|
||||
|
||||
/* Close the archive. */
|
||||
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
|
||||
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
|
||||
}
|
231
libarchive/test/test_read_pax_xattr_rht_security_selinux.tar.uu
Normal file
231
libarchive/test/test_read_pax_xattr_rht_security_selinux.tar.uu
Normal file
@ -0,0 +1,231 @@
|
||||
begin 664 test_read_pax_xattr_rht_security_selinux.tar
|
||||
M+B]087A(96%D97)S+C$V-C0O=&5S="YT>'0`````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M`````````````#`P,#`V-#0`,#`P,#`P,``P,#`P,#`P`#`P,#`P,#`P,C(R
|
||||
M`#$S-#8T-S<U-30U`#`Q,C0S-``@>```````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M``````````````````````````````````````````!U<W1A<@`P,```````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M```````````````````````R.2!M=&EM93TQ-34W,SDV,S(U+C@P-C`V-#<Q
|
||||
M"C(Y(&%T:6UE/3$U-3<S.38S,C4N.#`V,#8T-S$*,S`@8W1I;64],34X-CDY
|
||||
M-C,R,RXR-S@P,C`V-3@*-3@@4DA4+G-E8W5R:71Y+G-E;&EN=7@]<WES=&5M
|
||||
M7W4Z;V)J96-T7W(Z861M:6Y?:&]M95]T.G,P"@``````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M`````````````````````````````````````````````'1E<W0N='AT````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M```````````````````````````````````````````````````````````P
|
||||
M,#`P-C0T`#`P,#`P,#``,#`P,#`P,``P,#`P,#`P,#`P,``Q,S0V-#<W-34T
|
||||
M-0`P,3(V,#8`(#``````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````=7-T87(`,#!R;V]T````````````````
|
||||
M`````````````````````')O;W0`````````````````````````````````
|
||||
M````,#`P,#`P,``P,#`P,#`P````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
9````````````````````````````````````
|
||||
`
|
||||
end
|
@ -28,11 +28,11 @@
|
||||
*/
|
||||
#include "test.h"
|
||||
|
||||
DEFINE_TEST(test_schily_xattr_pax)
|
||||
DEFINE_TEST(test_read_pax_xattr_schily)
|
||||
{
|
||||
struct archive *a;
|
||||
struct archive_entry *ae;
|
||||
const char *refname = "test_read_pax_schily_xattr.tar";
|
||||
const char *refname = "test_read_pax_xattr_schily.tar";
|
||||
const char *xname; /* For xattr tests. */
|
||||
const void *xval; /* For xattr tests. */
|
||||
size_t xsize; /* For xattr tests. */
|
@ -1,4 +1,4 @@
|
||||
begin 644 test_schily_xattr_pax.tar
|
||||
begin 644 test_read_pax_xattr_schily.tar.uu
|
||||
M+B]087A(96%D97)S+C$U,C4O8V]N9F9I;&5S````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M`````````````#`P,#`V-#0`,#`P,#`P,``P,#`P,#`P`#`P,#`P,#`P-C0W
|
@ -124,6 +124,9 @@ DEFINE_TEST(test_write_filter_zstd)
|
||||
archive_write_set_filter_option(a, NULL, "compression-level", "25")); /* too big */
|
||||
assertEqualIntA(a, ARCHIVE_OK,
|
||||
archive_write_set_filter_option(a, NULL, "compression-level", "9"));
|
||||
/* Following is disabled as it will fail on library versions < 1.3.4 */
|
||||
/* assertEqualIntA(a, ARCHIVE_OK,
|
||||
archive_write_set_filter_option(a, NULL, "compression-level", "-1")); */
|
||||
assertEqualIntA(a, ARCHIVE_OK,
|
||||
archive_write_set_filter_option(a, NULL, "compression-level", "7"));
|
||||
assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
|
||||
|
@ -631,7 +631,8 @@ A decimal integer from 4 to 7 specifying the lz4 compression block size
|
||||
Use the previous block of the block being compressed for
|
||||
a compression dictionary to improve compression ratio.
|
||||
.It Cm zstd:compression-level
|
||||
A decimal integer from 1 to 22 specifying the zstd compression level.
|
||||
A decimal integer specifying the zstd compression level. Supported values depend
|
||||
on the library version, common values are from 1 to 22.
|
||||
.It Cm lzop:compression-level
|
||||
A decimal integer from 1 to 9 specifying the lzop compression level.
|
||||
.It Cm xz:compression-level
|
||||
|
Loading…
Reference in New Issue
Block a user