]> git.ipfire.org Git - thirdparty/xz.git/log
thirdparty/xz.git
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()

7 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
7 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
7 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
7 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.

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

The contributions have been rewritten.

7 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
7 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.

7 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"

7 months agoBuild: Use -Wimplicit-fallthrough=5 when supported
Lasse Collin [Wed, 1 Jan 2025 13:34:51 +0000 (15:34 +0200)] 
Build: Use -Wimplicit-fallthrough=5 when supported

Now that we have the FALLTHROUGH macro, use the strictest mode with
GCC so that comment-based fallthrough markings are no longer accepted.

In GCC, -Wextra includes -Wimplicit-fallthrough=3 and
-Wimplicit-fallthrough is the same as -Wimplicit-fallthrough=3.
Thus, the strict mode requires specifying -Wimplicit-fallthrough=5.

Clang has -Wimplicit-fallthrough which is *not* enabled by -Wextra.
Clang doesn't have a variant that takes an argument. Thus we need
to check for -Wimplicit-fallthrough. Do it before checking for
-Wimplicit-fallthrough=5 so that the latter overrides the former
when using GCC.

7 months agoReplace "Fall through" comments with FALLTHROUGH
Lasse Collin [Wed, 1 Jan 2025 13:30:50 +0000 (15:30 +0200)] 
Replace "Fall through" comments with FALLTHROUGH

7 months agosysdefs.h: Add FALLTHROUGH macro
Lasse Collin [Wed, 1 Jan 2025 13:08:51 +0000 (15:08 +0200)] 
sysdefs.h: Add FALLTHROUGH macro

7 months agoxzdec: Fix language in a comment
Lasse Collin [Wed, 1 Jan 2025 13:06:15 +0000 (15:06 +0200)] 
xzdec: Fix language in a comment

7 months agoWindows: Make NLS require UCRT and gettext-runtime >= 0.23.1
Lasse Collin [Thu, 2 Jan 2025 11:35:48 +0000 (13:35 +0200)] 
Windows: Make NLS require UCRT and gettext-runtime >= 0.23.1

Also remove the recently-added workaround from tuklib_gettext.h.
Requiring a new enough gettext-runtime is cleaner. I guess it's
mostly MSYS2 where xz is built with translation support, so once
MSYS2 has Gettext >= 0.23.1, this requirement shouldn't be a problem
in practice.

7 months agowindows/build-with-cmake.bat: Fix ENABLE_NLS to XZ_NLS
Lasse Collin [Thu, 2 Jan 2025 09:52:17 +0000 (11:52 +0200)] 
windows/build-with-cmake.bat: Fix ENABLE_NLS to XZ_NLS

Fixes: 29f77c7b707f2458fb047e77497354b195e05b14
7 months agoBuild: Use git log --pretty=medium when creating ChangeLog
Lasse Collin [Mon, 30 Dec 2024 09:21:57 +0000 (11:21 +0200)] 
Build: Use git log --pretty=medium when creating ChangeLog

It's the default in git-log. Specifying it explicitly is good in case
a user has set format.pretty to a different value.

7 months agoWindows: Update MinGW-w64 + CMake instructions to recommend UCRT
Lasse Collin [Mon, 30 Dec 2024 08:51:33 +0000 (10:51 +0200)] 
Windows: Update MinGW-w64 + CMake instructions to recommend UCRT

7 months agoxz man page: Describe the source file deletion in -z and -d options
Lasse Collin [Mon, 30 Dec 2024 08:51:26 +0000 (10:51 +0200)] 
xz man page: Describe the source file deletion in -z and -d options

The DESCRIPTION section always explained it, and the OPTIONS section
only described the differences to the default behavior. However, new
users in a hurry may skip reading DESCRIPTION. The default behavior
is a bit dangerous, thus it's good to repeat in --compress and
--decompress docs that source file is removed after successful operation.

Fixes: https://github.com/tukaani-project/xz/issues/150
7 months agoBuild: Set libtool -version-info so that it matches with CMake
Lasse Collin [Fri, 27 Dec 2024 19:52:28 +0000 (21:52 +0200)] 
Build: Set libtool -version-info so that it matches with CMake

In the past, they haven't been in sync in development versions
although they (of course) have been in stable releases.

7 months agoCMake/macOS: Use GNU Libtool compatible shared library versioning
Lasse Collin [Sat, 28 Dec 2024 16:28:56 +0000 (18:28 +0200)] 
CMake/macOS: Use GNU Libtool compatible shared library versioning

Because this increases the Mach-O compatibility_version, this commit
shouldn't cause any ABI compatibility trouble for existing CMake users
on macOS. This is assuming that they won't later downgrade to an older
liblzma version that was built with CMake before this commit.

Meson allows customising the Mach-O versioning too. So the three
build systems can be configured to be compatible.

7 months agoCMake: Edit a comment
Lasse Collin [Sat, 28 Dec 2024 12:49:45 +0000 (14:49 +0200)] 
CMake: Edit a comment

7 months agoversion.sh: Omit an unwanted dot from development versions
Lasse Collin [Sat, 28 Dec 2024 18:39:49 +0000 (20:39 +0200)] 
version.sh: Omit an unwanted dot from development versions

It printed 5.7.0.alpha instead of 5.7.0alpha.

Fixes: e7a42cda7c827e016619e8cab15e2faf5d4181ae
7 months agoCMake: Remove a duplicate word from a comment
Lasse Collin [Fri, 27 Dec 2024 14:25:07 +0000 (16:25 +0200)] 
CMake: Remove a duplicate word from a comment

7 months agoINSTALL: Document CMAKE_DLL_NAME_WITH_SOVERSION
Lasse Collin [Fri, 27 Dec 2024 14:23:12 +0000 (16:23 +0200)] 
INSTALL: Document CMAKE_DLL_NAME_WITH_SOVERSION

7 months agoxz: Fix comments
Lasse Collin [Thu, 26 Dec 2024 19:27:18 +0000 (21:27 +0200)] 
xz: Fix comments

7 months agoCMake: Disable unity builds project-wide
Dexter Castor Döpping [Sun, 22 Dec 2024 12:44:03 +0000 (13:44 +0100)] 
CMake: Disable unity builds project-wide

liblzma and xz can't be compiled as a unity/jumbo build because of
redeclarations and type name reuse. The CMake documentation recommends
setting UNITY_BUILD to false in this case.

This is especially important if we're compiled as a subproject and the
consumer wants to use CMAKE_UNITY_BUILD=ON for the rest of their code
base.

Closes: https://github.com/tukaani-project/xz/pull/158
7 months agoWindows: Workaround a UTF-8 issue in Gettext's libintl_setlocale()
Lasse Collin [Fri, 20 Dec 2024 06:51:18 +0000 (08:51 +0200)] 
Windows: Workaround a UTF-8 issue in Gettext's libintl_setlocale()

See the comment. In this package, locale is set at program startup and
not changed later, so the point (2) in the comment isn't a problem.

Fixes: 46ee0061629fb075d61d83839e14dd193337af59
7 months agoRevert "Windows: Use UTF-8 locale when active code page is UTF-8"
Lasse Collin [Fri, 20 Dec 2024 04:50:36 +0000 (06:50 +0200)] 
Revert "Windows: Use UTF-8 locale when active code page is UTF-8"

This reverts commit 0d0b574cc45045d6150d397776340c068df59e2a.

7 months agoxzdec: Use setlocale() instead of tuklib_gettext_setlocale()
Lasse Collin [Thu, 19 Dec 2024 16:31:09 +0000 (18:31 +0200)] 
xzdec: Use setlocale() instead of tuklib_gettext_setlocale()

xzdec isn't translated and doesn't need libintl on Windows even
when NLS is enabled, thus libintl_setlocale() cannot interfere
with the locale settings. Thus, standard setlocale() works perfectly.

In the commit 78868b6e, the explanation in the commit message is wrong.

Fixes: 78868b6ed63fa4c89f73e3dfed27abfb8b0d46db
7 months agoWindows: Revert the setlocale(LC_ALL, ".UTF8") documentation
Lasse Collin [Thu, 19 Dec 2024 17:36:15 +0000 (19:36 +0200)] 
Windows: Revert the setlocale(LC_ALL, ".UTF8") documentation

Only leave the FindFileFirstA() notes from 20dfca81, reverting
the incorrect setlocale() notes. On Windows, Gettext's <libintl.h>
overrides setlocale() with libintl_setlocale() wrapper. I hadn't
noticed this, and thus my conclusions were wrong.

Fixes: 20dfca8171dad4c64785ac61d5b68972c444877b
7 months agotuklib_mbstr_wrap: Silence a warning from Clang
Lasse Collin [Wed, 18 Dec 2024 15:49:05 +0000 (17:49 +0200)] 
tuklib_mbstr_wrap: Silence a warning from Clang

Fixes: ca529c3f41a4a19a59e2e252e6dd9255f130c634
7 months agoUpdate THANKS
Lasse Collin [Wed, 18 Dec 2024 12:00:09 +0000 (14:00 +0200)] 
Update THANKS

7 months agoUpdate TODO
Lasse Collin [Wed, 18 Dec 2024 12:00:09 +0000 (14:00 +0200)] 
Update TODO

Fixes: 5f6dddc6c911df02ba660564e78e6de80947c947
7 months agolzmainfo: Use tuklib_mbstr_nonprint
Lasse Collin [Wed, 18 Dec 2024 12:00:09 +0000 (14:00 +0200)] 
lzmainfo: Use tuklib_mbstr_nonprint

7 months agoxzdec: Use tuklib_mbstr_nonprint
Lasse Collin [Wed, 18 Dec 2024 12:00:09 +0000 (14:00 +0200)] 
xzdec: Use tuklib_mbstr_nonprint

7 months agoxz: Use tuklib_mbstr_nonprint
Lasse Collin [Wed, 18 Dec 2024 12:00:09 +0000 (14:00 +0200)] 
xz: Use tuklib_mbstr_nonprint

Call tuklib_mask_nonprint() on filenames and also on a few other
strings from the command line too.

The filename printed by "xz --robot --list" (in list.c) is also masked.
It's good to get rid of tabs and newlines which would desync the output
but masking other chars wouldn't be strictly necessary. It might matter
with sensible filenames if LC_CTYPE is "C" (when iswprint() might reject
non-ASCII chars) and a script wants to read a filename from xz's output.
Hopefully it's an unusual enough corner case to not be a real problem.

7 months agoAdd tuklib_mbstr_nonprint to mask non-printable characters
Lasse Collin [Wed, 18 Dec 2024 12:00:09 +0000 (14:00 +0200)] 
Add tuklib_mbstr_nonprint to mask non-printable characters

Malicious filenames or other untrusted strings may affect the state of
the terminal when such strings are printed as part of (error) messages.
Add functions that mask such characters.

It's not enough to handle only single-byte control characters.
In multibyte locales, some control characters are multibyte too, for
example, terminals interpret C1 control characters (U+0080 to U+009F)
that are two bytes as UTF-8.

Instead of checking for control characters with iswcntrl(), this
uses iswprint() to detect printable characters. This is much stricter.
On Windows it's actually too strict as it rejects some characters that
definitely are printable.

Gnulib's quotearg would do a lot more but I hope this simpler method
is good enough here.

Thanks to Ryan Colyer for the discussion about the problems of
the earlier single-byte-only method.

Thanks to Christian Weisgerber for reporting a bug in an earlier
version of this code.

Thanks to Jeroen Roovers for a typo fix.

Closes: https://github.com/tukaani-project/xz/pull/118
7 months agoTranslations: Add preliminary Georgian translation
Lasse Collin [Wed, 18 Dec 2024 09:33:09 +0000 (11:33 +0200)] 
Translations: Add preliminary Georgian translation

Most of the auto-wrapped strings are translated already. A few
strings have changed since this was created though. This file
isn't in the Translation Project *yet* because these strings
are still very new.

Closes: https://github.com/tukaani-project/xz/pull/145
7 months agoxz: Make one string simpler for translators
Lasse Collin [Wed, 30 Oct 2024 18:50:20 +0000 (20:50 +0200)] 
xz: Make one string simpler for translators

Leading spaces in the string can get miscounted by translators.

7 months agolzmainfo: Sync the translatable strings with xz
Lasse Collin [Tue, 17 Dec 2024 08:26:10 +0000 (10:26 +0200)] 
lzmainfo: Sync the translatable strings with xz

7 months agoxz: Use automatic word wrapping for help texts
Lasse Collin [Tue, 17 Dec 2024 08:26:10 +0000 (10:26 +0200)] 
xz: Use automatic word wrapping for help texts

--long-help is now one line longer because --lzma1 is now on its
own line.

7 months agopo/Makevars: Add --keyword=W_:... to XGETTEXT_OPTIONS
Lasse Collin [Mon, 16 Dec 2024 16:46:45 +0000 (18:46 +0200)] 
po/Makevars: Add --keyword=W_:... to XGETTEXT_OPTIONS

The text was copied from tuklib_gettext.h.

Also rearrange the --keyword options to be last on the line.

7 months agoAdd tuklib_mbstr_wrap for automatic word wrapping
Lasse Collin [Mon, 16 Dec 2024 16:43:52 +0000 (18:43 +0200)] 
Add tuklib_mbstr_wrap for automatic word wrapping

Automatic word wrapping makes translators' work easier and reduces
errors like misaligned columns or overlong lines. Right-to-left
languages and languages that don't use spaces between words will
still need extra effort. (xz hasn't been translated to any RTL
language so far.)

7 months agoBuild: Sort filenames to ASCII order in Makefile.am
Lasse Collin [Tue, 17 Dec 2024 15:57:18 +0000 (17:57 +0200)] 
Build: Sort filenames to ASCII order in Makefile.am

7 months agotuklib_mbstr_width: Add tuklib_mbstr_width_mem()
Lasse Collin [Mon, 21 Oct 2024 15:51:24 +0000 (18:51 +0300)] 
tuklib_mbstr_width: Add tuklib_mbstr_width_mem()

It's a new function split from tuklib_mbstr_width().
It's useful with partial strings that aren't terminated with \0.

7 months agotuklib_mbstr_width: Update a comment about shift states
Lasse Collin [Mon, 16 Dec 2024 18:08:27 +0000 (20:08 +0200)] 
tuklib_mbstr_width: Update a comment about shift states

7 months agotuklib_mbstr_width: Don't mention shift states in the API docs
Lasse Collin [Mon, 21 Oct 2024 15:47:56 +0000 (18:47 +0300)] 
tuklib_mbstr_width: Don't mention shift states in the API docs

It is assumed that this code won't be used with charsets that use
locking shift states.

7 months agotuklib_mbstr_width: Use stricter return value checking
Lasse Collin [Mon, 21 Oct 2024 15:41:41 +0000 (18:41 +0300)] 
tuklib_mbstr_width: Use stricter return value checking

This should make no difference in practice (at least if mbrtowc()
isn't broken).

7 months agotuklib_mbstr_width: Change the behavior when wcwidth() is not available
Lasse Collin [Mon, 16 Dec 2024 18:06:07 +0000 (20:06 +0200)] 
tuklib_mbstr_width: Change the behavior when wcwidth() is not available

If wcwidth() isn't available (Windows), previously it was assumed
that one byte == one column in the terminal. Now it is assumed that
one multibyte character == one column. This works better with UTF-8.
Languages that only use single-width characters without any combining
characters should work correctly with this.

In xz, none of po/*.po contain combining characters and only ko.po,
zh_CN.po, and zh_TW.po contain fullwidth characters. Thus, "only"
those three translations in xz are broken on Windows with the
UTF-8 code page. Broken means that column headings in xz -lvv and
(only in the master branch) strings in --long-help are misaligned,
so it's not a huge problem. I don't know if those three languages
displayed perfectly before the UTF-8 change because I hadn't tested
translations with native Windows builds before.

Fixes: 46ee0061629fb075d61d83839e14dd193337af59
7 months agoxzdec: Use setlocale() via tuklib_gettext_setlocale()
Lasse Collin [Wed, 18 Dec 2024 12:23:13 +0000 (14:23 +0200)] 
xzdec: Use setlocale() via tuklib_gettext_setlocale()

xzdec isn't translated and didn't have locale-specific behavior
in the past. On Windows with UTF-8 in the application manifest,
setting the locale makes a difference though:

  - Without any setlocale() call, non-ASCII filenames don't display
    properly in Command Prompt unless one first uses "chcp 65001"
    to set the console code page to UTF-8.

  - setlocale(LC_ALL, "") is enough to make non-ASCII filenames
    print correctly in Command Prompt without using "chcp 65001",
    assuming that the non-UTF-8 code page (like 850) supports
    those non-ASCII characters.

  - setlocale(LC_ALL, ".UTF8") is even better because then mbrtowc() and
    such functions use an UTF-8 locale instead of a legacy code page.
    The tuklib_gettext_setlocale() macro takes care of this (without
    enabling any translations).

Fixes: 46ee0061629fb075d61d83839e14dd193337af59
7 months agoWindows: Use UTF-8 locale when active code page is UTF-8
Lasse Collin [Tue, 17 Dec 2024 12:59:37 +0000 (14:59 +0200)] 
Windows: Use UTF-8 locale when active code page is UTF-8

XZ Utils 5.6.3 set the active code page to UTF-8 to fix CVE-2024-47611.
This wasn't paired with UCRT-specific setlocale(LC_ALL, ".UTF8"), thus
non-ASCII characters from translations became mojibake.

Fixes: 46ee0061629fb075d61d83839e14dd193337af59
7 months agoWindows: Document the need for setlocale(LC_ALL, ".UTF8")
Lasse Collin [Tue, 17 Dec 2024 13:01:29 +0000 (15:01 +0200)] 
Windows: Document the need for setlocale(LC_ALL, ".UTF8")

Also warn about unpaired surrogates and (somewhat UTF-8-specific)
MAX_PATH issue in FindFirstFileA().

Fixes: 46ee0061629fb075d61d83839e14dd193337af59
7 months agoxzdec: Call tuklib_progname_init() early enough
Lasse Collin [Wed, 18 Dec 2024 12:12:22 +0000 (14:12 +0200)] 
xzdec: Call tuklib_progname_init() early enough

If the early pledge() call on OpenBSD fails, it calls my_errorf()
which requires the "progname" variable.

Fixes: d74fb5f060b76db709b50f5fd37490394e52f975
7 months agoCMake: Bump maximum policy version to 3.31
Lasse Collin [Sun, 15 Dec 2024 17:08:32 +0000 (19:08 +0200)] 
CMake: Bump maximum policy version to 3.31

With CMake 3.31, there were a few warnings from
CMP0177 "install() DESTINATION paths are normalized".
These occurred because the install(FILES) command in
my_install_man_lang() is called with a DESTINATION path
that contains two consecutive slashes, for example,
"share/man//man1". Such a path is for the English man pages.
With translated man pages, the language code goes between
the slashes. The warning was probably triggered because the
extra slash gets removed by the normalization.

7 months agoUpdate THANKS
Lasse Collin [Sun, 15 Dec 2024 16:35:27 +0000 (18:35 +0200)] 
Update THANKS

7 months agoliblzma: Fix incorrect macro name in a comment
Dexter Castor Döpping [Sun, 8 Dec 2024 17:24:29 +0000 (18:24 +0100)] 
liblzma: Fix incorrect macro name in a comment

Fixes: 33b8a24b6646a9dbfd8358405aec466b13078559
Closes: https://github.com/tukaani-project/xz/pull/155