]> git.ipfire.org Git - thirdparty/xz.git/log
thirdparty/xz.git
4 months agoCMake: Use cmake_push_check_state in tuklib_cpucores and tuklib_physmem
Lasse Collin [Sun, 9 Mar 2025 12:43:07 +0000 (14:43 +0200)] 
CMake: Use cmake_push_check_state in tuklib_cpucores and tuklib_physmem

Now the changes to CMAKE_REQUIRED_DEFINITIONS are temporary and don't
leak to the calling code.

4 months agoCMake: Revise tuklib_use_system_extensions
Lasse Collin [Sun, 9 Mar 2025 12:06:35 +0000 (14:06 +0200)] 
CMake: Revise tuklib_use_system_extensions

Define NetBSD and Darwin/macOS feature test macros. Autoconf defines
these too (and a few others).

Define the macros on Windows except with MSVC. The _GNU_SOURCE macro
makes a difference with mingw-w64.

Use a function instead of a macro. Don't take the TARGET_OR_ALL argument
because there's always global effect because the global variable
CMAKE_REQUIRED_DEFINITIONS is modified.

4 months agodoc/SHA256SUMS: Add 5.7.2beta
Lasse Collin [Sat, 8 Mar 2025 12:54:29 +0000 (14:54 +0200)] 
doc/SHA256SUMS: Add 5.7.2beta

4 months agoBump version and soname for 5.7.2beta v5.7.2beta
Lasse Collin [Sat, 8 Mar 2025 12:29:57 +0000 (14:29 +0200)] 
Bump version and soname for 5.7.2beta

4 months agoAdd NEWS for 5.7.2beta
Lasse Collin [Sat, 8 Mar 2025 12:24:38 +0000 (14:24 +0200)] 
Add NEWS for 5.7.2beta

4 months agoCOPYING: Remove the note about old releases
Lasse Collin [Sat, 8 Mar 2025 12:23:00 +0000 (14:23 +0200)] 
COPYING: Remove the note about old releases

4 months agoxz: Update the man page about the environment variables again
Lasse Collin [Sat, 8 Mar 2025 12:22:28 +0000 (14:22 +0200)] 
xz: Update the man page about the environment variables again

4 months agoliblzma: Edit spelling in a comment
Lasse Collin [Thu, 6 Mar 2025 17:26:09 +0000 (19:26 +0200)] 
liblzma: Edit spelling in a comment

It was found with codespell.

4 months agoxz: Update the man page about the environment variables
Lasse Collin [Thu, 6 Mar 2025 17:14:23 +0000 (19:14 +0200)] 
xz: Update the man page about the environment variables

4 months agoDocs: Add a few TRANSLATORS comments to man pages
Lasse Collin [Thu, 6 Mar 2025 15:37:39 +0000 (17:37 +0200)] 
Docs: Add a few TRANSLATORS comments to man pages

All translators know that --command-line-options must not be translated.
With some other strings it's not obvious when the untranslated string
must be preserved. These comments hopefully help.

4 months agoScripts: Mark the LZMA Utils script aliases as deprecated
Lasse Collin [Thu, 6 Mar 2025 14:34:32 +0000 (16:34 +0200)] 
Scripts: Mark the LZMA Utils script aliases as deprecated

The deprecated aliases are lzcmp, lzdiff, lzless, lzmore,
lzgrep, lzegrep, and lzfgrep. The commands that start with
the xz prefix have identical behavior, for example, both
lzgrep and xzgrep handle all supported file formats.

This doesn't affect lzma, unlzma, lzcat, lzmadec, or lzmainfo.
The last release of LZMA Utils was made in 2008, but the lzma
compatibility alias for the gzip-like tool is still in common use.
Deprecating it would cause unnecessary breakage.

5 months agoTranslations: Add Serbian man page translations
Lasse Collin [Sun, 2 Mar 2025 19:13:04 +0000 (21:13 +0200)] 
Translations: Add Serbian man page translations

5 months agoTranslations: Update Georgian translation
Lasse Collin [Sun, 2 Mar 2025 18:42:14 +0000 (20:42 +0200)] 
Translations: Update Georgian translation

5 months agoUpdate THANKS
Lasse Collin [Fri, 28 Feb 2025 19:07:21 +0000 (21:07 +0200)] 
Update THANKS

5 months agoUpdate THANKS
Lasse Collin [Sat, 22 Feb 2025 14:04:58 +0000 (16:04 +0200)] 
Update THANKS

5 months agoTranslations: Update the Croatian translation
Lasse Collin [Wed, 19 Feb 2025 14:33:52 +0000 (16:33 +0200)] 
Translations: Update the Croatian translation

5 months agoBuild: Fix out-of-tree builds when using the replacement getopt_long
Lasse Collin [Mon, 17 Feb 2025 19:46:15 +0000 (21:46 +0200)] 
Build: Fix out-of-tree builds when using the replacement getopt_long

Nowaways $(top_builddir)/lib/getopt.h depends on headers in
$(top_srcdir)/lib, so both have to be in the include path.
CMake-based build already did this.

Fixes: 7e884c00d0093c38339f17fb1d280eec493f42ca
5 months agom4/getopt.m4: Remove an outdated comment
Lasse Collin [Mon, 17 Feb 2025 16:25:52 +0000 (18:25 +0200)] 
m4/getopt.m4: Remove an outdated comment

5 months agoBuild: Allow forcing the use of the replacement getopt_long
Lasse Collin [Mon, 17 Feb 2025 16:11:58 +0000 (18:11 +0200)] 
Build: Allow forcing the use of the replacement getopt_long

Now one can pass gl_replace_getopt=yes to configure to force the use
of GNU getopt_long from the lib directory. This only checks that the
value of gl_replace_getopt is non-empty, so one cannot force the
replacement to be disabled.

Closes: https://github.com/tukaani-project/xz/pull/166
5 months agoUpdate THANKS
Lasse Collin [Mon, 17 Feb 2025 16:11:42 +0000 (18:11 +0200)] 
Update THANKS

5 months agoUpdate THANKS
Lasse Collin [Wed, 12 Feb 2025 17:23:31 +0000 (19:23 +0200)] 
Update THANKS

5 months agoUpdate THANKS
Lasse Collin [Tue, 11 Feb 2025 10:13:41 +0000 (12:13 +0200)] 
Update THANKS

5 months agoTranslations: Update the Polish translation
Lasse Collin [Sat, 8 Feb 2025 09:39:08 +0000 (11:39 +0200)] 
Translations: Update the Polish translation

5 months agoDocs: Update TODO a little
Lasse Collin [Fri, 7 Feb 2025 17:12:03 +0000 (19:12 +0200)] 
Docs: Update TODO a little

5 months agoAdd researcher credits of CVE-2022-1271 and CVE-2024-47611 to THANKS
Lasse Collin [Fri, 7 Feb 2025 16:50:56 +0000 (18:50 +0200)] 
Add researcher credits of CVE-2022-1271 and CVE-2024-47611 to THANKS

These are specific phrases that were included in the advisories and
NEWS. It's nice to have them in THANKS as well.

5 months agoUpdate THANKS
Lasse Collin [Fri, 7 Feb 2025 16:43:00 +0000 (18:43 +0200)] 
Update THANKS

5 months agoDocs: Update the "Translations" section in README
Lasse Collin [Tue, 4 Feb 2025 12:12:46 +0000 (14:12 +0200)] 
Docs: Update the "Translations" section in README

Make it clearer that translations cannot be accepted if they don't
come via the Translation Project.

Column headings have been handled automatically for years and now --help
is autowrapped too, so the related instructions can be removed.

5 months agodebug/translations.bash: Revise a little
Lasse Collin [Tue, 4 Feb 2025 11:23:53 +0000 (13:23 +0200)] 
debug/translations.bash: Revise a little

Make it work for out-of-tree builds without requiring one to specify
the location of the xz executable.

Add xz --filters-help.

Make the output shorter by reducing the number of xz -lvv test files.

Show the value of LANGUAGE environment variable.

Show the xz.git version using git describe --abbrev=8 instead of =4.

5 months agoBuild: Use "git describe --abbrev=8" in snapshot tarball names
Lasse Collin [Tue, 4 Feb 2025 11:20:52 +0000 (13:20 +0200)] 
Build: Use "git describe --abbrev=8" in snapshot tarball names

8 is more likely to be reproducible than the old 4 without being
excessively long for a small repository like this.

5 months agoUpdate THANKS
Lasse Collin [Tue, 4 Feb 2025 17:37:17 +0000 (19:37 +0200)] 
Update THANKS

5 months agoTranslations: Update the Serbian translation
Lasse Collin [Mon, 3 Feb 2025 14:29:31 +0000 (16:29 +0200)] 
Translations: Update the Serbian translation

5 months agoTranslations: Update Chinese (traditional) translation
Lasse Collin [Mon, 3 Feb 2025 14:15:38 +0000 (16:15 +0200)] 
Translations: Update Chinese (traditional) translation

Since there are no spaces between words, the unsophisticated automatic
word wrapping code needs some help. Compared to the version in the
Translation Project, I added a few \t characters which the word
wrapping code interprets as zero width spaces (hopefully they are
placed correctly). These edits can be seen with this command:

    grep -v ^# po/zh_TW.po | grep --color -F '\t'

5 months agoUpdate THANKS
Lasse Collin [Mon, 3 Feb 2025 14:12:44 +0000 (16:12 +0200)] 
Update THANKS

6 months agoBuild: Update posix-shell.m4 from Gnulib
Lasse Collin [Sun, 2 Feb 2025 12:15:07 +0000 (14:15 +0200)] 
Build: Update posix-shell.m4 from Gnulib

Tabs have been converted to spaces and a "serial" number has been
added. The previous version was from 2008/2009. There are no functional
changes since then but now it's clearer that the copy in XZ Utils
isn't outdated.

The new file was picked from the Gnulib commit
81a4c1e3b7692e95c0806d948cbab9148ad85ef2. A later commit adds
a warranty disclaimer to the license, which obviously is fine,
but I didn't find a SPDX license identifier for the new license,
so for simplicity I used the earlier commit.

6 months agoBuild: Check for -fsanitize= also in $CC
Lasse Collin [Sun, 2 Feb 2025 10:51:03 +0000 (12:51 +0200)] 
Build: Check for -fsanitize= also in $CC

People may put -fsanitize in CC instead of CFLAGS so check both.
Landlock sandbox isn't compatible with sanitizers so it's nice
to catch the incompatible options at configure time.

Don't attempt to do the same in CMakeLists.txt; the check for
CMAKE_C_FLAGS / CFLAGS shall be enough there. The extra flags from
the CC environment variable go into the undocumented internal variable
CMAKE_C_COMPILER_ARG1 (all flags from CC go into that same variable).
Peeking the internal variable merely for improved diagnostics isn't
worth it.

Fixes: 88588b1246d8c26ffbc138b3e5c413c5f14c3179
6 months agoBuild: Remove the FIXME about -Werror checks
Lasse Collin [Tue, 26 Sep 2023 16:11:20 +0000 (19:11 +0300)] 
Build: Remove the FIXME about -Werror checks

6 months agoBuild: If using a GCC compatible compiler, ensure that -Werror works
Lasse Collin [Tue, 26 Sep 2023 16:10:51 +0000 (19:10 +0300)] 
Build: If using a GCC compatible compiler, ensure that -Werror works

The check can be skipped by passing SKIP_WERROR_CHECK=yes to configure.
It won't be documented anywhere else than in the error message.

Ways to test:

    ./configure CC=gcc CFLAGS=-Wunused-macros
    ./configure CC=clang CFLAGS=-Weverything
    ./configure CC=clang CFLAGS=-Weverything SKIP_WERROR_CHECK=yes

6 months agoUpdate THANKS
Lasse Collin [Sun, 2 Feb 2025 12:30:15 +0000 (14:30 +0200)] 
Update THANKS

6 months agoTranslations: Update Romanian translation
Lasse Collin [Sat, 1 Feb 2025 10:49:09 +0000 (12:49 +0200)] 
Translations: Update Romanian translation

6 months agoTranslations: Update Korean man page translations
Lasse Collin [Thu, 30 Jan 2025 16:16:43 +0000 (18:16 +0200)] 
Translations: Update Korean man page translations

6 months agoTranslations: Add Italian man page translations
Lasse Collin [Thu, 30 Jan 2025 16:15:52 +0000 (18:15 +0200)] 
Translations: Add Italian man page translations

6 months agoTranslations: Update the Finnish translation
Lasse Collin [Wed, 29 Jan 2025 20:18:29 +0000 (22:18 +0200)] 
Translations: Update the Finnish translation

6 months agolzmainfo: Use tuklib_mbstr_wrap for --help text
Lasse Collin [Wed, 29 Jan 2025 18:50:03 +0000 (20:50 +0200)] 
lzmainfo: Use tuklib_mbstr_wrap for --help text

Some languages have so long strings that they need to be wrapped.

6 months agoTranslations: Update the Croatian translation
Lasse Collin [Wed, 29 Jan 2025 18:00:06 +0000 (20:00 +0200)] 
Translations: Update the Croatian translation

6 months agoTranslations: Update the Finnish translation
Lasse Collin [Wed, 29 Jan 2025 17:56:01 +0000 (19:56 +0200)] 
Translations: Update the Finnish translation

6 months agoTranslations: Update the German man page translations
Lasse Collin [Wed, 29 Jan 2025 17:55:27 +0000 (19:55 +0200)] 
Translations: Update the German man page translations

6 months agoTranslations: Update the German translation
Lasse Collin [Wed, 29 Jan 2025 17:55:17 +0000 (19:55 +0200)] 
Translations: Update the German translation

6 months agoTranslations: Update the Turkish translation
Lasse Collin [Wed, 29 Jan 2025 17:55:05 +0000 (19:55 +0200)] 
Translations: Update the Turkish translation

6 months agoTranslations: Add the Dutch translation
Lasse Collin [Wed, 29 Jan 2025 17:54:36 +0000 (19:54 +0200)] 
Translations: Add the Dutch translation

6 months agoTranslations: Update the Georgian translation
Lasse Collin [Wed, 29 Jan 2025 17:53:50 +0000 (19:53 +0200)] 
Translations: Update the Georgian translation

6 months agoTranslations: Update the Spanish translation
Lasse Collin [Wed, 29 Jan 2025 17:53:21 +0000 (19:53 +0200)] 
Translations: Update the Spanish translation

6 months agoTranslations: Update the Korean translation
Lasse Collin [Wed, 29 Jan 2025 17:53:06 +0000 (19:53 +0200)] 
Translations: Update the Korean translation

6 months agoTranslations: Update the Romanian man page translations
Lasse Collin [Wed, 29 Jan 2025 17:52:42 +0000 (19:52 +0200)] 
Translations: Update the Romanian man page translations

6 months agoTranslations: Update the Romanian translation
Lasse Collin [Wed, 29 Jan 2025 17:51:59 +0000 (19:51 +0200)] 
Translations: Update the Romanian translation

6 months agoTranslations: Update the Ukrainian man page translations
Lasse Collin [Wed, 29 Jan 2025 17:50:50 +0000 (19:50 +0200)] 
Translations: Update the Ukrainian man page translations

6 months agoTranslations: Update the Ukrainian translation
Lasse Collin [Wed, 29 Jan 2025 17:50:26 +0000 (19:50 +0200)] 
Translations: Update the Ukrainian translation

6 months agoTranslations: Update the Swedish translation
Lasse Collin [Wed, 29 Jan 2025 17:48:43 +0000 (19:48 +0200)] 
Translations: Update the Swedish translation

6 months agotuklib_physmem: Clean up disabled code
Lasse Collin [Tue, 28 Jan 2025 14:33:32 +0000 (16:33 +0200)] 
tuklib_physmem: Clean up disabled code

6 months agoWindows: Avoid an error message on broken pipe
Lasse Collin [Tue, 28 Jan 2025 14:28:18 +0000 (16:28 +0200)] 
Windows: Avoid an error message on broken pipe

Also make xz not process more input files after a broken pipe has
been detected. This matches the behavior on POSIX. If all files
are being written to standard output, trying with the next file is
pointless when it's known that standard output won't accept more data.

xzdec already stopped after the first error. It does so with all
errors, so it differs from xz:

    $ xz -dc not_found_1 not_found_2
    xz: not_found_1: No such file or directory
    xz: not_found_2: No such file or directory

    $ xzdec not_found_1 not_found_2
    xzdec: not_found_1: No such file or directory

Reported-by: Vincent Torri
6 months agodoc/SHA256SUMS: Add 5.6.4 and 5.7.1alpha
Lasse Collin [Thu, 23 Jan 2025 17:59:17 +0000 (19:59 +0200)] 
doc/SHA256SUMS: Add 5.6.4 and 5.7.1alpha

6 months agoBump version and soname for 5.7.1alpha v5.7.1alpha
Lasse Collin [Thu, 23 Jan 2025 09:50:42 +0000 (11:50 +0200)] 
Bump version and soname for 5.7.1alpha

6 months agoTranslations: Run po4a/update-po
Lasse Collin [Thu, 23 Jan 2025 09:48:43 +0000 (11:48 +0200)] 
Translations: Run po4a/update-po

6 months agoAdd NEWS for 5.7.1alpha
Lasse Collin [Thu, 23 Jan 2025 09:40:46 +0000 (11:40 +0200)] 
Add NEWS for 5.7.1alpha

6 months agoAdd NEWS for 5.6.4
Lasse Collin [Thu, 23 Jan 2025 09:40:46 +0000 (11:40 +0200)] 
Add NEWS for 5.6.4

6 months agoNEWS: The security fix in 5.6.3 is known as CVE-2024-47611
Lasse Collin [Thu, 23 Jan 2025 09:40:46 +0000 (11:40 +0200)] 
NEWS: The security fix in 5.6.3 is known as CVE-2024-47611

6 months agowindows/build.bash: Fix error message
Lasse Collin [Wed, 22 Jan 2025 14:55:09 +0000 (16:55 +0200)] 
windows/build.bash: Fix error message

Fixes: 1ee716f74085223c8fbcae1d5a384e6bf53c0f6a
6 months agoWindows: Disable MinGW-w64's stdio functions in size-optimized builds
Lasse Collin [Wed, 22 Jan 2025 13:03:55 +0000 (15:03 +0200)] 
Windows: Disable MinGW-w64's stdio functions in size-optimized builds

This only affects builds with UCRT. With legacy MSVCRT, the replacement
functions are always enabled.

Omitting the MinGW-w64 replacements saves over 20 KiB per executable.
The downside is that --enable-small or XZ_SMALL=ON disables thousand
separator support in xz messages. If someone is OK with the slower
speed of slightly smaller builds, lack of thousand separators won't
matter.

Don't override __USE_MINGW_ANSI_STDIO if it is already defined (via
CPPFLAGS or such method).

6 months agoliblzma: Add raw ARM64, RISC-V, and x86 BCJ filter APIs
Lasse Collin [Mon, 20 Jan 2025 14:44:27 +0000 (16:44 +0200)] 
liblzma: Add raw ARM64, RISC-V, and x86 BCJ filter APIs

Put them behind the LZMA_UNSTABLE macro for now.

These low-level special APIs might become useful in erofs-utils.

6 months agoxz: Unify a few strings with liblzma
Lasse Collin [Mon, 20 Jan 2025 14:31:49 +0000 (16:31 +0200)] 
xz: Unify a few strings with liblzma

Avoid having both "%s: foo" and "foo" as translatable strings
so that translators don't need to handle it twice.

6 months agoxz: Translate error messages from lzma_str_to_filters()
Lasse Collin [Mon, 20 Jan 2025 14:31:49 +0000 (16:31 +0200)] 
xz: Translate error messages from lzma_str_to_filters()

liblzma doesn't use gettext but the messages are included in xz.pot,
so xz can translate the messages.

6 months agoliblzma: Mark string conversion messages as translatable
Lasse Collin [Mon, 20 Jan 2025 14:31:49 +0000 (16:31 +0200)] 
liblzma: Mark string conversion messages as translatable

6 months agoliblzma: Tweak a few error messages in lzma_str_to_filters()
Lasse Collin [Mon, 20 Jan 2025 14:31:35 +0000 (16:31 +0200)] 
liblzma: Tweak a few error messages in lzma_str_to_filters()

6 months agoUpdate THANKS
Lasse Collin [Sun, 19 Jan 2025 18:11:54 +0000 (20:11 +0200)] 
Update THANKS

6 months agoUpdate THANKS
Lasse Collin [Sun, 19 Jan 2025 17:40:32 +0000 (19:40 +0200)] 
Update THANKS

6 months agoliblzma: memcmplen.h: Use 8-byte method on 64-bit unaligned archs
Lasse Collin [Mon, 13 Jan 2025 06:44:58 +0000 (08:44 +0200)] 
liblzma: memcmplen.h: Use 8-byte method on 64-bit unaligned archs

Previously it was enabled only on x86-64 and ARM64 when also support
for unaligned access was detected or manually enabled at built time.

In the default build configuration, the 8-byte method is now enabled
also on 64-bit RISC-V and 64-bit PowerPC (both endiannesses). It was
reported that on big endian POWER9, encoding time may reduce 12-13 %.

This change only affects builds with GCC and Clang because the code
uses __builtin_ctzll or __builtin_clzll.

Thanks to Marcus Comstedt for testing on POWER9.

6 months agoUpdate THANKS
Lasse Collin [Sun, 12 Jan 2025 11:06:17 +0000 (13:06 +0200)] 
Update THANKS

6 months agoliblzma: Fix the encoder breakage on big endian ARM64
Lasse Collin [Sun, 12 Jan 2025 10:59:20 +0000 (12:59 +0200)] 
liblzma: Fix the encoder breakage on big endian ARM64

When the 8-byte method was enabled for ARM64, a check for endianness
wasn't added. This broke the LZMA/LZMA2 encoder. Test suite caught it.

Fixes: cd64dd70d5665b6048829c45772d08606f44672e
Co-authored-by: Marcus Comstedt <marcus@mc.pp.se>
6 months agoWindows: Update manifest comments about long UTF-8 filenames
Lasse Collin [Sun, 12 Jan 2025 09:04:27 +0000 (11:04 +0200)] 
Windows: Update manifest comments about long UTF-8 filenames

6 months agoWindows: Update build.bash and its README-Windows.txt to UCRT
Lasse Collin [Sun, 12 Jan 2025 08:47:58 +0000 (10:47 +0200)] 
Windows: Update build.bash and its README-Windows.txt to UCRT

While MSVCRT builds are possible, UCRT works better with UTF-8.
A 32-bit build is included still but hopefully it's not actually
needed anymore.

6 months agoTranslations: Update Serbian translation
Lasse Collin [Fri, 10 Jan 2025 11:11:40 +0000 (13:11 +0200)] 
Translations: Update Serbian translation

I rewrapped a few overlong lines. Those edits aren't in the
Translation Project. Automatic wrapping in the master branch
means that these strings need to be updated soon anyway.

6 months agoBuild: Use --sort=name in TAR_OPTIONS
Lasse Collin [Wed, 8 Jan 2025 17:26:29 +0000 (19:26 +0200)] 
Build: Use --sort=name in TAR_OPTIONS

Use also LC_COLLATE=C to make the sorting locale-independent.
Sorting makes the file order reproducible.

6 months agoxz: Workaround broken O_SEARCH in musl
Lasse Collin [Wed, 8 Jan 2025 17:08:08 +0000 (19:08 +0200)] 
xz: Workaround broken O_SEARCH in musl

Testing with musl 1.2.5 and Linux 6.12, O_SEARCH doesn't result
in a file descriptor that works with fsync() although it should work.
See the added comment.

The same issue affected gzip --synchronous:

    https://bugs.gnu.org/75405

Thanks to Paul Eggert.

6 months agoRevert "xz: O_SEARCH cannot be used for fsync()"
Lasse Collin [Tue, 7 Jan 2025 19:34:33 +0000 (21:34 +0200)] 
Revert "xz: O_SEARCH cannot be used for fsync()"

This reverts commit 4014e2479c7b0273f15bd0c9c017c5fe859b0d8f.

POSIX-conforming O_SEARCH should allow fsync().

6 months agoxz: O_SEARCH cannot be used for fsync()
Lasse Collin [Sun, 5 Jan 2025 19:43:11 +0000 (21:43 +0200)] 
xz: O_SEARCH cannot be used for fsync()

Opening a directory with O_SEARCH results in a file descriptor that can
be used with functions like openat(). Such a file descriptor cannot be
used with fsync(). Use O_RDONLY instead.

In musl, O_SEARCH becomes Linux-specific O_PATH. A file descriptor
from O_PATH doesn't allow fsync().

Seems that it's not possible to fsync() a directory that has write
and search permissions but not read permission.

Fixes: 2a9e91d796d091740489d951fa7780525e4275f1
6 months agoCI: Make ctest show errors from failed tests
Lasse Collin [Sun, 5 Jan 2025 18:48:28 +0000 (20:48 +0200)] 
CI: Make ctest show errors from failed tests

6 months agotuklib_mbstr_nonprint: Preserve the value of errno
Lasse Collin [Sun, 5 Jan 2025 18:14:49 +0000 (20:14 +0200)] 
tuklib_mbstr_nonprint: Preserve the value of errno

A typical use case is like this:

    printf("%s: %s\n", tuklib_mask_nonprint(filename), strerror(errno));

tuklib_mask_nonprint() may call mbrtowc() and malloc() which may modify
errno. If errno isn't preserved, the error message might be wrong if
a compiler decides to call tuklib_mask_nonprint() before strerror().

Fixes: 40e573305535960574404d2eae848b248c95ea7e
6 months agoxz: Use fsync() before deleting the input file, and add --no-sync
Lasse Collin [Sun, 5 Jan 2025 18:14:49 +0000 (20:14 +0200)] 
xz: Use fsync() before deleting the input file, and add --no-sync

xz's default behavior is to delete the input file after successful
compression or decompression (unless writing to standard output).
If the system crashes soon after the deletion, it is possible that
the newly written file has not yet hit the disk while the previous
delete operation might have. In that case neither the original file
nor the written file is available.

Call fsync() on the file. On POSIX systems, sync also the directory
where the file was created.

Add a new option --no-sync which disables fsync() usage. It can avoid
a (possibly significant) performance penalty when processing many
small files. It's fine to use --no-sync when one knows that the files
are easy to recreate or restore after a system crash.

Using fsync() after every flush initiated by --flush-timeout was
considered. It wasn't implemented at least for now.

  - --flush-timeout is typically used when writing to stdout. If stdout
    is a file, xz cannot (portably) sync the directory of the file.
    One would need to create the output file first, sync the directory,
    and then run xz with fsync() enabled.

  - If xz --flush-timeout output goes to a file, it's possible to use
    a separate script to sync the file, for example, once per minute
    while telling xz to flush more frequently.

  - Not supporting syncing with --flush-timeout was simpler.

Portability notes:

  - On systems that lack O_SEARCH (like Linux), "xz dir/file" will now
    fail if "dir" cannot be opened for reading. If "dir" still has
    write and search permissions (like d-wx------ in "ls -l"),
    previously xz would have been able to compress "dir/file" still.
    Now it only works if using --no-sync (or --keep or --stdout).

  - <libgen.h> and dirname() should be available on all POSIX systems,
    and aren't needed on non-POSIX systems.

  - fsync() is available on all POSIX systems. The directory syncing
    could be changed to fdatasync() although at least on ext4 it
    doesn't seem to make a performance difference in xz's usage.
    fdatasync() would need a build system check to support (old)
    special cases, for example, MINIX 3.3.0 doesn't have fdatasync()
    and Solaris 10 needs -lrt.

  - On native Windows, _commit() is used to replace fsync(). Directory
    syncing isn't done and shouldn't be needed. (In Cygwin, fsync() on
    directories is a no-op.)

  - DJGPP has fsync() for files. ;-)

Using fsync() was considered somewhere around 2009 and again in 2016 but
those times the idea was rejected. For comparison, GNU gzip 1.7 (2016)
added the option --synchronous which enables fsync().

Co-authored-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
Fixes: https://bugs.debian.org/814089
Link: https://www.mail-archive.com/xz-devel@tukaani.org/msg00282.html
Closes: https://github.com/tukaani-project/xz/pull/151
6 months agoxz: Use "goto" for error handling in io_open_dest_real()
Lasse Collin [Fri, 27 Dec 2024 07:15:50 +0000 (09:15 +0200)] 
xz: Use "goto" for error handling in io_open_dest_real()

6 months agoliblzma: Always validate the first digit of a preset string
Lasse Collin [Sun, 5 Jan 2025 10:10:05 +0000 (12:10 +0200)] 
liblzma: Always validate the first digit of a preset string

lzma_str_to_filters() may call parse_lzma12_preset() in two ways. The
call from str_to_filters() detects the string type from the first
character(s) and as a side-effect it validates the first digit of
the preset string. So this change makes no difference there.

However, the call from parse_options() doesn't pre-validate the string.
parse_lzma12_preset() will return an invalid value which is passed to
lzma_lzma_preset() which safely rejects it. The bug still affects the
the error message:

    $ xz --filters=lzma2:preset=X
    xz: Error in --filters=FILTERS option:
    xz: lzma2:preset=X
    xz:               ^
    xz: Unsupported preset

After the fix:

    $ xz --filters=lzma2:preset=X
    xz: Error in --filters=FILTERS option:
    xz: lzma2:preset=X
    xz:              ^
    xz: Unsupported preset

The ^ now correctly points to the X and not past it because the X itself
is the problematic character.

Fixes: cedeeca2ea6ada5b0411b2ae10d7a859e837f203
6 months agoxz: Fix getopt_long argument type in --filters*
Lasse Collin [Sun, 5 Jan 2025 09:40:34 +0000 (11:40 +0200)] 
xz: Fix getopt_long argument type in --filters*

Forgetting the argument (or not using = to separate the option from
the argument) resulted in lzma_str_to_filters() being called with NULL
as input string argument. The function handles it fine but xz passes
the NULL to printf() too:

    $ xz --filters
    xz: Error in --filters=FILTERS option:
    xz: (null)
    xz: ^
    xz: Unexpected NULL pointer argument(s) to lzma_str_to_filters()

Now it's correct:

    $ xz --filters
    xz: option '--filters' requires an argument

The --filters-help option doesn't take any arguments.

Fixes: 9ded880a0221f4d1256845fc4ab957ffd377c760
Fixes: d6af7f347077b22403133239592e478931307759
Fixes: a165d7df1964121eb9df715e6f836a31c865beef
6 months agoxzdec: Don't leave Landlock file descriptor open for no reason
Lasse Collin [Sat, 4 Jan 2025 18:04:56 +0000 (20:04 +0200)] 
xzdec: Don't leave Landlock file descriptor open for no reason

This fix is similar to 48ff3f06521ca326996ab9a04d1b342098960427.

Fixes: d74fb5f060b76db709b50f5fd37490394e52f975
6 months agoxz: Make --single-stream imply --keep
Lasse Collin [Sat, 4 Jan 2025 18:02:18 +0000 (20:02 +0200)] 
xz: Make --single-stream imply --keep

Suggested by xx on #tukaani on 2024-04-12.

6 months agoUpdate AUTHORS
Lasse Collin [Sat, 4 Jan 2025 17:57:07 +0000 (19:57 +0200)] 
Update AUTHORS

The contributions have been rewritten.

6 months agoxz: Avoid printf formats like %2$s
Lasse Collin [Sat, 4 Jan 2025 13:02:16 +0000 (15:02 +0200)] 
xz: Avoid printf formats like %2$s

It's a POSIX feature that isn't in standard C. It's not available on
Windows. Even MinGW-w64 with __USE_MINGW_ANSI_STDIO doesn't support
it even though it supports POSIX %'d for thousand separators.

Gettext's <libintl.h> provides overrides for printf and other functions
which do support the %2$s formats. Translations use them. But xz should
work on Windows without <libintl.h> too.

Fixes: 3e9177fd206d20d6d8acc7d203c25a9ae0549229
6 months agotuklib_mbstr_wrap: Add printf format attribute
Lasse Collin [Sat, 4 Jan 2025 12:41:37 +0000 (14:41 +0200)] 
tuklib_mbstr_wrap: Add printf format attribute

It's supported by GCC 3.x already.

6 months agoxz: Translate a Windows-specific string
Lasse Collin [Sat, 4 Jan 2025 11:44:12 +0000 (13:44 +0200)] 
xz: Translate a Windows-specific string

Originally I thought that native Windows builds wouldn't be translated
but nowadays at least MSYS2 ships such binaries.

7 months agoxz: Use my_landlock.h
Lasse Collin [Thu, 2 Jan 2025 13:32:10 +0000 (15:32 +0200)] 
xz: Use my_landlock.h

A slightly silly thing is that xz may now query the ABI version up to
three times. We could call my_landlock_ruleset_attr_forbid_all() only
once and cache the result but it didn't seem worth doing.

7 months agoxzdec: Use my_landlock.h
Lasse Collin [Thu, 2 Jan 2025 13:32:10 +0000 (15:32 +0200)] 
xzdec: Use my_landlock.h

7 months agoAdd my_landlock.h with helper functions to use Linux Landlock
Lasse Collin [Thu, 2 Jan 2025 13:32:10 +0000 (15:32 +0200)] 
Add my_landlock.h with helper functions to use Linux Landlock

This supports up to Landlock ABI version 6. The current code in
xz and xzdec only support up to ABI version 4.

7 months agoliblzma: Silence warnings from "clang -Wimplicit-fallthrough"
Lasse Collin [Wed, 1 Jan 2025 16:46:50 +0000 (18:46 +0200)] 
liblzma: Silence warnings from "clang -Wimplicit-fallthrough"