Compare commits

...

25 Commits

Author SHA1 Message Date
Jia Tan fd1b975b78 Bump version and soname for 5.6.1. 2024-03-09 11:42:50 +08:00
Jia Tan a2cda57249 Add NEWS for 5.6.1 2024-03-09 11:27:27 +08:00
Jia Tan 8583c60211 Translations: Add missing --riscv option to man page translations. 2024-03-09 10:43:20 +08:00
Jia Tan 74b138d2a6 Tests: Update two test files.
The original files were generated with random local to my machine.
To better reproduce these files in the future, a constant seed was used
to recreate these files.
2024-03-09 10:18:29 +08:00
Jia Tan 3ec6dfd656 Tests: Test --single-stream can decompress bad-3-corrupt_lzma2.xz.
The first stream in this file is valid, so this tests that xz properly
stops after decompressing it.
2024-03-09 10:08:32 +08:00
Jia Tan a67dcce610 Tests: Update RISC-V test files.
This increases code coverage and tests for possible shifting bugs.
2024-03-09 10:05:32 +08:00
Jia Tan 058337b0f1 liblzma: Fix typos in crc32_fast.c and crc64_fast.c. 2024-03-09 09:52:32 +08:00
Jia Tan cd5de9c1bb Tests: Replace HAVE_MICROLZMA usage in CMake and Autotools builds.
This reverts commit adaacafde6.
2024-03-09 09:49:55 +08:00
Jia Tan 651a1545c8 liblzma: Fix false Valgrind error report with GCC.
With GCC and a certain combination of flags, Valgrind will falsely
trigger an invalid write. This appears to be due to the omission of
instructions to properly save, set up, and restore the frame pointer.

The IFUNC resolver is a leaf function since it only calls a function
that is inlined. So sometimes GCC omits the frame pointer instructions
in the resolver unless this optimization is explictly disabled.

This fixes https://bugzilla.redhat.com/show_bug.cgi?id=2267598.
2024-03-09 09:20:57 +08:00
Lasse Collin 6e97b299f1 liblzma: Fix a typo in a comment in the RISC-V filter. 2024-03-05 23:21:26 +02:00
Jia Tan 4e1c97052b liblzma: Use attribute no_profile_instrument_function with ifunc.
Thanks to Sam James for determining this was the attribute needed to
workaround the GCC bug and for his version of the patch in Gentoo.
2024-03-05 00:34:46 +08:00
Jia Tan ed957d3942 Build: Require attribute no_profile_instrument_function for ifunc usage.
Using __attribute__((__no_profile_instrument_function__)) on the ifunc
resolver works around a bug in GCC -fprofile-generate:
it adds profiling code even to ifunc resolvers which can make
the ifunc resolver crash at program startup. This attribute
was not introduced until GCC 7 and Clang 13, so ifunc won't
be used with prior versions of these compilers.

This bug was brought to our attention by:

    https://bugs.gentoo.org/925415

And was reported to upstream GCC by:

    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=11411
2024-03-05 00:27:31 +08:00
Lasse Collin e98ddaf85a liblzma: Fix a comment in the RISC-V filter. 2024-03-04 19:23:18 +02:00
Lasse Collin 319cec142f CMake: Warn if translated man pages are missing. 2024-02-29 16:35:52 +02:00
Lasse Collin 46c3e113d8 CMake: Warn if gettext tools and pre-created .gmo files are missing.
It's only done with CMake >= 3.20 and if library support
for translation was already found.

Sort of fixes: https://github.com/tukaani-project/xz/issues/82
2024-02-29 16:35:52 +02:00
Lasse Collin 86bec8334b xz: Add comments. 2024-02-28 18:33:34 +02:00
Jia Tan 5c91b454c2 xz: Change logging level for thread reduction to highest verbosity only.
Now that multi threaded encoding is the default, users do not need to
see a warning message everytime the number of threads is reduced. On
some machines, this could happen very often. It is not unreasonable for
users to need to set double verbose mode to see this kind of
information.

To see these warning messages -vv or --verbose --verbose must be passed
to set xz into the highest possible verbosity mode.

These warnings had caused automated testing frameworks to fail when they
expected no output to stderr.

Thanks to Sebastian Andrzej Siewior for reporting this and for the
initial version of the patch.
2024-02-28 18:31:04 +02:00
Lasse Collin d0e57b2f15 Fix sorting in THANKS. 2024-02-28 18:31:04 +02:00
Jia Tan d416be55ac Update THANKS. 2024-02-28 18:31:04 +02:00
Chien Wong f06b33edd2 xz: Add missing RISC-V on the filter list in the man page
Signed-off-by: Chien Wong <m@xv97.com>
2024-02-28 18:31:04 +02:00
Jia Tan a100f9111c Build: Fix Linux Landlock feature test in Autotools and CMake builds.
The previous Linux Landlock feature test assumed that having the
linux/landlock.h header file was enough. The new feature tests also
requires that prctl() and the required Landlock system calls are
supported.
2024-02-28 18:31:04 +02:00
Jia Tan d85efdc891 Tests: Add test_microlzma to .gitignore and CMakeLists.txt. 2024-02-28 18:31:04 +02:00
Jia Tan 42ee425673 Tests: Correct license header in test_microlzma.c. 2024-02-28 18:31:04 +02:00
Jia Tan c83349dfd9 Fix typos in NEWS and CMakeLists. 2024-02-28 18:31:04 +02:00
Jia Tan 2d7d862e3f Bump version and soname for 5.6.0. 2024-02-24 15:55:08 +08:00
31 changed files with 2244 additions and 2024 deletions

1
.gitignore vendored
View File

@ -67,6 +67,7 @@ coverage
/tests/test_index /tests/test_index
/tests/test_index_hash /tests/test_index_hash
/tests/test_lzip_decoder /tests/test_lzip_decoder
/tests/test_microlzma
/tests/test_memlimit /tests/test_memlimit
/tests/test_stream_flags /tests/test_stream_flags
/tests/test_vli /tests/test_vli

View File

@ -273,14 +273,48 @@ endif()
# Translation support requires CMake 3.20 because it added the Intl::Intl # Translation support requires CMake 3.20 because it added the Intl::Intl
# target so we don't need to play with the individual variables. # target so we don't need to play with the individual variables.
# #
# The defintion ENABLE_NLS is added only to those targets that use it, thus # The definition ENABLE_NLS is added only to those targets that use it, thus
# it's not done here. (xz has translations, xzdec doesn't.) # it's not done here. (xz has translations, xzdec doesn't.)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20") if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20")
find_package(Intl) find_package(Intl)
find_package(Gettext) find_package(Gettext)
if(Intl_FOUND) if(Intl_FOUND)
option(ENABLE_NLS "Native Language Support (translated messages)" ON) option(ENABLE_NLS "Native Language Support (translated messages)" ON)
# If translation support is enabled but neither gettext tools or
# pre-generated .gmo files exist, translation support cannot be
# enabled.
#
# The detection of pre-generated .gmo files is done by only
# checking for the existence of a single .gmo file; Ukrainian
# is one of many translations that gets regular updates.
if(ENABLE_NLS AND NOT GETTEXT_FOUND AND
NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/po/uk.gmo")
# This only sets the variable, not the cache variable!
set(ENABLE_NLS OFF)
# This message is shown only when new enough CMake is used and
# library support for translations was found. The assumptions is
# that in this situation the user might have interest in the
# translations. This also keeps this code simpler.
message(WARNING "Native language support (NLS) has been disabled. "
"NLS support requires either gettext tools or "
"pre-generated .gmo files. The latter are only "
"available in distribution tarballs. "
"To avoid this warning, NLS can be explicitly "
"disabled by passing -DENABLE_NLS=OFF to cmake.")
endif()
# Warn if NLS is enabled but translated man pages are missing.
if(UNIX AND ENABLE_NLS AND
NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/po4a/man")
message(WARNING "Native language support (NLS) has been enabled "
"but pre-generated translated man pages "
"were not found and thus they won't be installed. "
"Run 'po4a/update-po' to generate them.")
endif()
# The *installed* name of the translation files is "xz.mo". # The *installed* name of the translation files is "xz.mo".
set(TRANSLATION_DOMAIN "xz") set(TRANSLATION_DOMAIN "xz")
endif() endif()
@ -819,10 +853,6 @@ if(MICROLZMA_DECODER)
target_sources(liblzma PRIVATE src/liblzma/common/microlzma_decoder.c) target_sources(liblzma PRIVATE src/liblzma/common/microlzma_decoder.c)
endif() endif()
if (MICROLZMA_ENCODER OR MICROLZMA_DECODER)
add_compile_definitions(HAVE_MICROLZMA)
endif()
############################# #############################
# lzip (.lz) format support # # lzip (.lz) format support #
@ -901,10 +931,29 @@ endif()
# Sandboxing: Landlock # Sandboxing: Landlock
if(NOT SANDBOX_FOUND AND ENABLE_SANDBOX MATCHES "^ON$|^landlock$") if(NOT SANDBOX_FOUND AND ENABLE_SANDBOX MATCHES "^ON$|^landlock$")
check_include_file(linux/landlock.h HAVE_LINUX_LANDLOCK_H) # A compile check is done here because some systems have
# linux/landlock.h, but do not have the syscalls defined
# in order to actually use Linux Landlock.
check_c_source_compiles("
#include <linux/landlock.h>
#include <sys/syscall.h>
#include <sys/prctl.h>
.
void my_sandbox(void)
{
(void)prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
(void)SYS_landlock_create_ruleset;
(void)SYS_landlock_restrict_self;
(void)LANDLOCK_CREATE_RULESET_VERSION;
return;
}
if(HAVE_LINUX_LANDLOCK_H) int main(void) { return 0; }
set(SANDBOX_COMPILE_DEFINITION "HAVE_LINUX_LANDLOCK_H") "
HAVE_LINUX_LANDLOCK)
if(HAVE_LINUX_LANDLOCK)
set(SANDBOX_COMPILE_DEFINITION "HAVE_LINUX_LANDLOCK")
set(SANDBOX_FOUND ON) set(SANDBOX_FOUND ON)
# Of our three sandbox methods, only Landlock is incompatible # Of our three sandbox methods, only Landlock is incompatible
@ -1029,6 +1078,13 @@ if(USE_ATTR_IFUNC STREQUAL "auto")
#endif #endif
static void func(void) { return; } static void func(void) { return; }
/*
* The attribute __no_profile_instrument_function__ is
* needed with GCC to prevent improper instrumentation in
* the ifunc resolver.
*/
__attribute__((__no_profile_instrument_function__))
static void (*resolve_func(void)) (void) { return func; } static void (*resolve_func(void)) (void) { return func; }
void func_ifunc(void) void func_ifunc(void)
__attribute__((__ifunc__(\"resolve_func\"))); __attribute__((__ifunc__(\"resolve_func\")));
@ -1988,6 +2044,16 @@ if(BUILD_TESTING)
test_vli test_vli
) )
# MicroLZMA encoder is needed for both encoder and decoder tests.
# If MicroLZMA decoder is not configured but LZMA1 decoder is, then
# test_microlzma will fail to compile because this configuration is
# not possible in the Autotools build, so the test was not made to
# support it since it would have required additional changes.
if (MICROLZMA_ENCODER AND (MICROLZMA_DECODER
OR NOT "lzma1" IN_LIST DECODERS))
list(APPEND LIBLZMA_TESTS test_microlzma)
endif()
foreach(TEST IN LISTS LIBLZMA_TESTS) foreach(TEST IN LISTS LIBLZMA_TESTS)
add_executable("${TEST}" "tests/${TEST}.c") add_executable("${TEST}" "tests/${TEST}.c")

28
NEWS
View File

@ -2,6 +2,32 @@
XZ Utils Release Notes XZ Utils Release Notes
====================== ======================
5.6.1 (2024-03-09)
* liblzma: Fixed two bugs relating to GNU indirect function (IFUNC)
with GCC. The more serious bug caused a program linked with
liblzma to crash on start up if the flag -fprofile-generate was
used to build liblzma. The second bug caused liblzma to falsely
report an invalid write to Valgrind when loading liblzma.
* xz: Changed the messages for thread reduction due to memory
constraints to only appear under the highest verbosity level.
* Build:
- Fixed a build issue when the header file <linux/landlock.h>
was present on the system but the Landlock system calls were
not defined in <sys/syscall.h>.
- The CMake build now warns and disables NLS if both gettext
tools and pre-created .gmo files are missing. Previously,
this caused the CMake build to fail.
* Minor improvements to man pages.
* Minor improvements to tests.
5.6.0 (2024-02-24) 5.6.0 (2024-02-24)
This bumps the minor version of liblzma because new features were This bumps the minor version of liblzma because new features were
@ -23,7 +49,7 @@ XZ Utils Release Notes
* Sandboxing support in xz: * Sandboxing support in xz:
- Landlock is now used even when xz needs to create files. - Landlock is now used even when xz needs to create files.
In this case the sandbox is has to be more permissive than In this case the sandbox has to be more permissive than
when no files need to be created. A similar thing was when no files need to be created. A similar thing was
already in use with pledge(2) since 5.3.4alpha. already in use with pledge(2) since 5.3.4alpha.

3
THANKS
View File

@ -152,9 +152,9 @@ has been important. :-) In alphabetical order:
- Dan Stromberg - Dan Stromberg
- Jia Tan - Jia Tan
- Vincent Torri - Vincent Torri
- Alexey Tourbin
- Paul Townsend - Paul Townsend
- Mohammed Adnène Trojette - Mohammed Adnène Trojette
- Alexey Tourbin
- Taiki Tsunekawa - Taiki Tsunekawa
- Maksym Vatsyk - Maksym Vatsyk
- Loganaden Velvindron - Loganaden Velvindron
@ -171,6 +171,7 @@ has been important. :-) In alphabetical order:
- Charles Wilson - Charles Wilson
- Lars Wirzenius - Lars Wirzenius
- Pilorz Wojciech - Pilorz Wojciech
- Chien Wong
- Ryan Young - Ryan Young
- Andreas Zieringer - Andreas Zieringer

View File

@ -304,13 +304,8 @@ AC_ARG_ENABLE([microlzma], AS_HELP_STRING([--disable-microlzma],
for example, erofs-utils.]), for example, erofs-utils.]),
[], [enable_microlzma=yes]) [], [enable_microlzma=yes])
case $enable_microlzma in case $enable_microlzma in
yes) yes | no)
AC_DEFINE([HAVE_MICROLZMA], [1], AC_MSG_RESULT([$enable_microlzma])
[Define to 1 if MicroLZMA support is enabled.])
AC_MSG_RESULT([yes])
;;
no)
AC_MSG_RESULT([no])
;; ;;
*) *)
AC_MSG_RESULT([]) AC_MSG_RESULT([])
@ -915,6 +910,13 @@ if test "x$enable_ifunc" = xauto ; then
#endif #endif
static void func(void) { return; } static void func(void) { return; }
/*
* The attribute __no_profile_instrument_function__ is
* needed with GCC to prevent improper instrumentation in
* the ifunc resolver.
*/
__attribute__((__no_profile_instrument_function__))
static void (*resolve_func (void)) (void) { return func; } static void (*resolve_func (void)) (void) { return func; }
void func_ifunc (void) void func_ifunc (void)
__attribute__((__ifunc__("resolve_func"))); __attribute__((__ifunc__("resolve_func")));
@ -1177,12 +1179,37 @@ AS_CASE([$enable_sandbox],
) )
AS_CASE([$enable_sandbox], AS_CASE([$enable_sandbox],
[auto | landlock], [ [auto | landlock], [
AC_CHECK_HEADERS([linux/landlock.h], [ AC_MSG_CHECKING([if Linux Landlock is usable])
# A compile check is done here because some systems have
# linux/landlock.h, but do not have the syscalls defined
# in order to actually use Linux Landlock.
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <linux/landlock.h>
#include <sys/syscall.h>
#include <sys/prctl.h>
void my_sandbox(void)
{
(void)prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
(void)SYS_landlock_create_ruleset;
(void)SYS_landlock_restrict_self;
(void)LANDLOCK_CREATE_RULESET_VERSION;
return;
}
]])], [
enable_sandbox=found enable_sandbox=found
AS_CASE([$CFLAGS], [*-fsanitize=*], [AC_MSG_ERROR([ AS_CASE([$CFLAGS], [*-fsanitize=*], [AC_MSG_ERROR([
CFLAGS contains '-fsanitize=' which is incompatible with the Landlock CFLAGS contains '-fsanitize=' which is incompatible with the Landlock
sandboxing. Use --disable-sandbox when using '-fsanitize'.])]) sandboxing. Use --disable-sandbox when using '-fsanitize'.])])
AC_DEFINE([HAVE_LINUX_LANDLOCK], [1],
[Define to 1 if Linux Landlock is supported.
See configure.ac for details.])
AC_MSG_RESULT([yes])
], [
AC_MSG_RESULT([no])
]) ])
] ]
) )

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,7 @@ liblzma_la_CPPFLAGS = \
-I$(top_srcdir)/src/liblzma/simple \ -I$(top_srcdir)/src/liblzma/simple \
-I$(top_srcdir)/src/common \ -I$(top_srcdir)/src/common \
-DTUKLIB_SYMBOL_PREFIX=lzma_ -DTUKLIB_SYMBOL_PREFIX=lzma_
liblzma_la_LDFLAGS = -no-undefined -version-info 10:99:5 liblzma_la_LDFLAGS = -no-undefined -version-info 11:1:6
EXTRA_DIST += liblzma_generic.map liblzma_linux.map validate_map.sh EXTRA_DIST += liblzma_generic.map liblzma_linux.map validate_map.sh
if COND_SYMVERS_GENERIC if COND_SYMVERS_GENERIC

View File

@ -19,10 +19,10 @@
#define LZMA_VERSION_MAJOR 5 #define LZMA_VERSION_MAJOR 5
/** \brief Minor version number of the liblzma release. */ /** \brief Minor version number of the liblzma release. */
#define LZMA_VERSION_MINOR 5 #define LZMA_VERSION_MINOR 6
/** \brief Patch version number of the liblzma release. */ /** \brief Patch version number of the liblzma release. */
#define LZMA_VERSION_PATCH 2 #define LZMA_VERSION_PATCH 1
/** /**
* \brief Version stability marker * \brief Version stability marker
@ -32,7 +32,7 @@
* - LZMA_VERSION_STABILITY_BETA * - LZMA_VERSION_STABILITY_BETA
* - LZMA_VERSION_STABILITY_STABLE * - LZMA_VERSION_STABILITY_STABLE
*/ */
#define LZMA_VERSION_STABILITY LZMA_VERSION_STABILITY_BETA #define LZMA_VERSION_STABILITY LZMA_VERSION_STABILITY_STABLE
/** \brief Commit version number of the liblzma release */ /** \brief Commit version number of the liblzma release */
#ifndef LZMA_VERSION_COMMIT #ifndef LZMA_VERSION_COMMIT

View File

@ -135,6 +135,8 @@ typedef uint32_t (*crc32_func_type)(
// This resolver is shared between all three dispatch methods. It serves as // This resolver is shared between all three dispatch methods. It serves as
// the ifunc resolver if ifunc is supported, otherwise it is called as a // the ifunc resolver if ifunc is supported, otherwise it is called as a
// regular function by the constructor or first call resolution methods. // regular function by the constructor or first call resolution methods.
// The function attributes are needed for safe IFUNC resolver usage with GCC.
lzma_resolver_attributes
static crc32_func_type static crc32_func_type
crc32_resolve(void) crc32_resolve(void)
{ {

View File

@ -98,6 +98,7 @@ typedef uint64_t (*crc64_func_type)(
# pragma GCC diagnostic ignored "-Wunused-function" # pragma GCC diagnostic ignored "-Wunused-function"
#endif #endif
lzma_resolver_attributes
static crc64_func_type static crc64_func_type
crc64_resolve(void) crc64_resolve(void)
{ {

View File

@ -128,6 +128,31 @@
# endif # endif
#endif #endif
#ifdef CRC_USE_IFUNC
// Two function attributes are needed to make IFUNC safe with GCC.
//
// no-omit-frame-pointer prevents false Valgrind issues when combined with
// a few other compiler flags. The optimize attribute is supported on
// GCC >= 4.4 and is not supported with Clang.
# if TUKLIB_GNUC_REQ(4,4) && !defined(__clang__)
# define no_omit_frame_pointer \
__attribute__((optimize("no-omit-frame-pointer")))
# else
# define no_omit_frame_pointer
# endif
// The __no_profile_instrument_function__ attribute support is checked when
// determining if ifunc can be used, so it is safe to use unconditionally.
// This attribute is needed because GCC can add profiling to the IFUNC
// resolver, which calls functions that have not yet been relocated leading
// to a crash on liblzma start up.
# define lzma_resolver_attributes \
__attribute__((__no_profile_instrument_function__)) \
no_omit_frame_pointer
#else
# define lzma_resolver_attributes
#endif
// For CRC32 use the generic slice-by-eight implementation if no optimized // For CRC32 use the generic slice-by-eight implementation if no optimized
// version is available. // version is available.
#if !defined(CRC32_ARCH_OPTIMIZED) && !defined(CRC32_GENERIC) #if !defined(CRC32_ARCH_OPTIMIZED) && !defined(CRC32_GENERIC)

View File

@ -122,7 +122,7 @@ global:
lzma_str_to_filters; lzma_str_to_filters;
} XZ_5.2; } XZ_5.2;
XZ_5.5.2beta { XZ_5.6.0 {
global: global:
lzma_mt_block_size; lzma_mt_block_size;
} XZ_5.4; } XZ_5.4;

View File

@ -137,7 +137,7 @@ global:
lzma_str_to_filters; lzma_str_to_filters;
} XZ_5.2; } XZ_5.2;
XZ_5.5.2beta { XZ_5.6.0 {
global: global:
lzma_mt_block_size; lzma_mt_block_size;
} XZ_5.4; } XZ_5.4;

View File

@ -116,7 +116,7 @@ AUIPC with rd != x0
Zfh, F, D, and Q: Zfh, F, D, and Q:
* RV32I: LB, LH, LW, LBU, LHU, SB, SH, SW * RV32I: LB, LH, LW, LBU, LHU, SB, SH, SW
* RV64I has also: LD, LWU, SD * RV64I has also: LD, LWU, SD
* Zhf: FLH, FSH * Zfh: FLH, FSH
* F: FLW, FSW * F: FLW, FSW
* D: FLD, FSD * D: FLD, FSD
* Q: FLQ, FSQ * Q: FLQ, FSQ
@ -320,11 +320,11 @@ AUIPC with rd == x0
// The left-hand side takes care of (1) and (2). // The left-hand side takes care of (1) and (2).
// (a) The lowest 7 bits are already known to be AUIPC so subtracting 0x17 // (a) The lowest 7 bits are already known to be AUIPC so subtracting 0x17
// makes those bits zeros. // makes those bits zeros.
// (b) If AUIPC rd equals x2, subtracting 0x10 makes bits [11:7] zeros. // (b) If AUIPC rd equals x2, subtracting 0x100 makes bits [11:7] zeros.
// If rd doesn't equal x2, then there will be at least one non-zero bit // If rd doesn't equal x2, then there will be at least one non-zero bit
// and the next step (c) is irrelevant. // and the next step (c) is irrelevant.
// (c) If the lowest two opcode bits of the packed inst2 are set in [13:12], // (c) If the lowest two opcode bits of the packed inst2 are set in [13:12],
// then subtracting 0x300 will make those bits zeros. Otherwise there // then subtracting 0x3000 will make those bits zeros. Otherwise there
// will be at least one non-zero bit. // will be at least one non-zero bit.
// //
// The shift by 18 removes the high bits from the final '>=' comparison and // The shift by 18 removes the high bits from the final '>=' comparison and

View File

@ -581,7 +581,14 @@ coder_set_compression_settings(void)
if (memory_usage <= memory_limit) { if (memory_usage <= memory_limit) {
// The memory usage is now low enough. // The memory usage is now low enough.
message(V_WARNING, _("Reduced the number of " //
// Since 5.6.1: This is only shown at
// V_DEBUG instead of V_WARNING because
// changing the number of threads doesn't
// affect the output. On some systems this
// message would be too common now that
// multithreaded compression is the default.
message(V_DEBUG, _("Reduced the number of "
"threads from %s to %s to not exceed " "threads from %s to %s to not exceed "
"the memory usage limit of %s MiB"), "the memory usage limit of %s MiB"),
uint64_to_str( uint64_to_str(
@ -600,8 +607,11 @@ coder_set_compression_settings(void)
// way -T0 won't use insane amount of memory but at the same // way -T0 won't use insane amount of memory but at the same
// time the soft limit will never make xz fail and never make // time the soft limit will never make xz fail and never make
// xz change settings that would affect the compressed output. // xz change settings that would affect the compressed output.
//
// Since 5.6.1: Like above, this is now shown at V_DEBUG
// instead of V_WARNING.
if (hardware_memlimit_mtenc_is_default()) { if (hardware_memlimit_mtenc_is_default()) {
message(V_WARNING, _("Reduced the number of threads " message(V_DEBUG, _("Reduced the number of threads "
"from %s to one. The automatic memory usage " "from %s to one. The automatic memory usage "
"limit of %s MiB is still being exceeded. " "limit of %s MiB is still being exceeded. "
"%s MiB of memory is required. " "%s MiB of memory is required. "

View File

@ -109,7 +109,7 @@ sandbox_enable_strict_if_allowed(int src_fd lzma_attribute((__unused__)),
} }
#elif defined(HAVE_LINUX_LANDLOCK_H) #elif defined(HAVE_LINUX_LANDLOCK)
////////////// //////////////
// Landlock // // Landlock //

View File

@ -9,7 +9,7 @@
// //
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#if defined(HAVE_PLEDGE) || defined(HAVE_LINUX_LANDLOCK_H) \ #if defined(HAVE_PLEDGE) || defined(HAVE_LINUX_LANDLOCK) \
|| defined(HAVE_CAP_RIGHTS_LIMIT) || defined(HAVE_CAP_RIGHTS_LIMIT)
# define ENABLE_SANDBOX 1 # define ENABLE_SANDBOX 1
#endif #endif

View File

@ -4,7 +4,7 @@
.\" Authors: Lasse Collin .\" Authors: Lasse Collin
.\" Jia Tan .\" Jia Tan
.\" .\"
.TH XZ 1 "2024-02-13" "Tukaani" "XZ Utils" .TH XZ 1 "2024-02-25" "Tukaani" "XZ Utils"
. .
.SH NAME .SH NAME
xz, unxz, xzcat, lzma, unlzma, lzcat \- Compress or decompress .xz and .lzma files xz, unxz, xzcat, lzma, unlzma, lzcat \- Compress or decompress .xz and .lzma files
@ -1812,6 +1812,8 @@ and
\fB\-\-ia64\fR[\fB=\fIoptions\fR] \fB\-\-ia64\fR[\fB=\fIoptions\fR]
.TP .TP
\fB\-\-sparc\fR[\fB=\fIoptions\fR] \fB\-\-sparc\fR[\fB=\fIoptions\fR]
.TP
\fB\-\-riscv\fR[\fB=\fIoptions\fR]
.PD .PD
Add a branch/call/jump (BCJ) filter to the filter chain. Add a branch/call/jump (BCJ) filter to the filter chain.
These filters can be used only as a non-last filter These filters can be used only as a non-last filter

View File

@ -24,14 +24,14 @@
# include <sys/capsicum.h> # include <sys/capsicum.h>
#endif #endif
#ifdef HAVE_LINUX_LANDLOCK_H #ifdef HAVE_LINUX_LANDLOCK
# include <linux/landlock.h> # include <linux/landlock.h>
# include <sys/prctl.h> # include <sys/prctl.h>
# include <sys/syscall.h> # include <sys/syscall.h>
#endif #endif
#if defined(HAVE_CAP_RIGHTS_LIMIT) || defined(HAVE_PLEDGE) \ #if defined(HAVE_CAP_RIGHTS_LIMIT) || defined(HAVE_PLEDGE) \
|| defined(HAVE_LINUX_LANDLOCK_H) || defined(HAVE_LINUX_LANDLOCK)
# define ENABLE_SANDBOX 1 # define ENABLE_SANDBOX 1
#endif #endif
@ -325,7 +325,7 @@ sandbox_enter(int src_fd)
goto error; goto error;
(void)src_fd; (void)src_fd;
#elif defined(HAVE_LINUX_LANDLOCK_H) #elif defined(HAVE_LINUX_LANDLOCK)
int landlock_abi = syscall(SYS_landlock_create_ruleset, int landlock_abi = syscall(SYS_landlock_create_ruleset,
(void *)NULL, 0, LANDLOCK_CREATE_RULESET_VERSION); (void *)NULL, 0, LANDLOCK_CREATE_RULESET_VERSION);
@ -389,7 +389,7 @@ main(int argc, char **argv)
} }
#endif #endif
#ifdef HAVE_LINUX_LANDLOCK_H #ifdef HAVE_LINUX_LANDLOCK
// Prevent the process from gaining new privileges. The return // Prevent the process from gaining new privileges. The return
// is ignored to keep compatibility with old kernels. // is ignored to keep compatibility with old kernels.
(void)prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0); (void)prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);

View File

@ -42,8 +42,7 @@ check_PROGRAMS = \
test_bcj_exact_size \ test_bcj_exact_size \
test_memlimit \ test_memlimit \
test_lzip_decoder \ test_lzip_decoder \
test_vli \ test_vli
test_microlzma
TESTS = \ TESTS = \
test_check \ test_check \
@ -58,7 +57,6 @@ TESTS = \
test_memlimit \ test_memlimit \
test_lzip_decoder \ test_lzip_decoder \
test_vli \ test_vli \
test_microlzma \
test_files.sh \ test_files.sh \
test_suffix.sh \ test_suffix.sh \
test_compress_prepared_bcj_sparc \ test_compress_prepared_bcj_sparc \
@ -67,6 +65,11 @@ TESTS = \
test_compress_generated_random \ test_compress_generated_random \
test_compress_generated_text test_compress_generated_text
if COND_MICROLZMA
check_PROGRAMS += test_microlzma
TESTS += test_microlzma
endif
if COND_SCRIPTS if COND_SCRIPTS
TESTS += test_scripts.sh TESTS += test_scripts.sh
endif endif

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -149,6 +149,17 @@ else
exit 1 exit 1
fi fi
# Test that --single-stream can decompress bad-3-corrupt_lzma2.xz.
# The first Stream in this file should decompress without errors.
# This file cannot be decompressed with xzdec.
I="$srcdir/files/bad-3-corrupt_lzma2.xz"
if test -z "$XZ" || "$XZ" -dc --single-stream $NO_WARN "$I" > /dev/null; then
:
else
echo "Good first Stream failed xz with --single-stream: $I"
exit 1
fi
######### #########
# .lzma # # .lzma #

View File

@ -1,3 +1,5 @@
// SPDX-License-Identifier: 0BSD
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// //
/// \file test_microlzma.c /// \file test_microlzma.c
@ -5,15 +7,10 @@
// //
// Author: Jia Tan // Author: Jia Tan
// //
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#include "tests.h" #include "tests.h"
#ifdef HAVE_MICROLZMA
#define BUFFER_SIZE 1024 #define BUFFER_SIZE 1024
#ifdef HAVE_ENCODER_LZMA1 #ifdef HAVE_ENCODER_LZMA1
@ -514,7 +511,6 @@ test_decode_bad_lzma_properties(void)
lzma_end(&strm); lzma_end(&strm);
} }
#endif #endif
#endif
extern int extern int
@ -522,17 +518,16 @@ main(int argc, char **argv)
{ {
tuktest_start(argc, argv); tuktest_start(argc, argv);
#ifndef HAVE_MICROLZMA #ifndef HAVE_ENCODER_LZMA1
tuktest_early_skip("MicroLZMA disabled"); tuktest_early_skip("LZMA1 encoder disabled");
#else #else
# ifdef HAVE_ENCODER_LZMA1
tuktest_run(test_encode_options); tuktest_run(test_encode_options);
tuktest_run(test_encode_basic); tuktest_run(test_encode_basic);
tuktest_run(test_encode_small_out); tuktest_run(test_encode_small_out);
tuktest_run(test_encode_actions); tuktest_run(test_encode_actions);
# endif
# if defined(HAVE_DECODER_LZMA1) && defined(HAVE_ENCODER_LZMA1) // MicroLZMA decoder tests require the basic encoder functionality.
# ifdef HAVE_DECODER_LZMA1
goodbye_world_encoded_size = basic_microlzma_encode(goodbye_world, goodbye_world_encoded_size = basic_microlzma_encode(goodbye_world,
ARRAY_SIZE(goodbye_world), &goodbye_world_encoded); ARRAY_SIZE(goodbye_world), &goodbye_world_encoded);