|
|
|
XZ Utils Release Notes |
|
====================== |
|
|
|
5.4.1 (2023-01-11) |
|
|
|
* liblzma: |
|
|
|
- Fixed the return value of lzma_microlzma_encoder() if the |
|
LZMA options lc/lp/pb are invalid. Invalid lc/lp/pb options |
|
made the function return LZMA_STREAM_END without encoding |
|
anything instead of returning LZMA_OPTIONS_ERROR. |
|
|
|
- Windows / Visual Studio: Workaround a possible compiler bug |
|
when targeting 32-bit x86 and compiling the CLMUL version of |
|
the CRC64 code. The CLMUL code isn't enabled by the Windows |
|
project files but it is in the CMake-based builds. |
|
|
|
* Build systems: |
|
|
|
- Windows-specific CMake changes: |
|
|
|
* Don't try to enable CLMUL CRC64 code if _mm_set_epi64x() |
|
isn't available. This fixes CMake-based build with Visual |
|
Studio 2013. |
|
|
|
* Created a workaround for a build failure with windres |
|
from GNU binutils. It is used only when the C compiler |
|
is GCC (not Clang). The workaround is incompatible |
|
with llvm-windres, resulting in "XZx20Utils" instead |
|
of "XZ Utils" in the resource file, but without the |
|
workaround llvm-windres works correctly. See the |
|
comment in CMakeLists.txt for details. |
|
|
|
* Included the resource files in the xz and xzdec build |
|
rules. Building the command line tools is still |
|
experimental but possible with MinGW-w64. |
|
|
|
- Visual Studio: Added stream_decoder_mt.c to the project |
|
files. Now the threaded decompressor lzma_stream_decoder_mt() |
|
gets built. CMake-based build wasn't affected. |
|
|
|
- Updated windows/INSTALL-MSVC.txt to mention that CMake-based |
|
build is now the preferred method with Visual Studio. The |
|
project files will probably be removed after 5.4.x releases. |
|
|
|
- Changes to |
|
|
|
* HAVE_DECL_CLOCK_MONOTONIC was replaced by |
|
HAVE_CLOCK_MONOTONIC. The old macro was always defined |
|
in configure-generated config.h to either 0 or 1. The |
|
new macro is defined (to 1) only if the declaration of |
|
CLOCK_MONOTONIC is available. This matches the way most |
|
other config.h macros work and makes things simpler with |
|
other build systems. |
|
|
|
* HAVE_DECL_PROGRAM_INVOCATION_NAME was replaced by |
|
HAVE_PROGRAM_INVOCATION_NAME for the same reason. |
|
|
|
* Tests: |
|
|
|
- Fixed test script compatibility with ancient /bin/sh |
|
versions. Now the five test_compress_* tests should |
|
no longer fail on Solaris 10. |
|
|
|
- Added and refactored a few tests. |
|
|
|
* Translations: |
|
|
|
- Updated the Catalan and Esperanto translations. |
|
|
|
- Added Korean and Ukrainian man page translations. |
|
|
|
|
|
5.4.0 (2022-12-13) |
|
|
|
This bumps the minor version of liblzma because new features were |
|
added. The API and ABI are still backward compatible with liblzma |
|
5.2.x and 5.0.x. |
|
|
|
Since 5.3.5beta: |
|
|
|
* All fixes from 5.2.10. |
|
|
|
* The ARM64 filter is now stable. The xz option is now |
|
Decompression requires XZ Utils 5.4.0. In the future the ARM64 |
|
filter will be supported by XZ for Java, XZ Embedded (including |
|
the version in Linux), LZMA SDK, and 7-Zip. |
|
|
|
* Translations: |
|
|
|
- Updated Catalan, Croatian, German, Romanian, and Turkish |
|
translations. |
|
|
|
- Updated German man page translations. |
|
|
|
- Added Romanian man page translations. |
|
|
|
Summary of new features added in the 5.3.x development releases: |
|
|
|
* liblzma: |
|
|
|
- Added threaded .xz decompressor lzma_stream_decoder_mt(). |
|
It can use multiple threads with .xz files that have multiple |
|
Blocks with size information in Block Headers. The threaded |
|
encoder in xz has always created such files. |
|
|
|
Single-threaded encoder cannot store the size information in |
|
Block Headers even if one used LZMA_FULL_FLUSH to create |
|
multiple Blocks, so this threaded decoder cannot use multiple |
|
threads with such files. |
|
|
|
If there are multiple Streams (concatenated .xz files), one |
|
Stream will be decompressed completely before starting the |
|
next Stream. |
|
|
|
- A new decoder flag LZMA_FAIL_FAST was added. It makes the |
|
threaded decompressor report errors soon instead of first |
|
flushing all pending data before the error location. |
|
|
|
- New Filter IDs: |
|
* LZMA_FILTER_ARM64 is for ARM64 binaries. |
|
* LZMA_FILTER_LZMA1EXT is for raw LZMA1 streams that don't |
|
necessarily use the end marker. |
|
|
|
- Added lzma_str_to_filters(), lzma_str_from_filters(), and |
|
lzma_str_list_filters() to convert a preset or a filter chain |
|
string to a lzma_filter[] and vice versa. These should make |
|
it easier to write applications that allow users to specify |
|
custom compression options. |
|
|
|
- Added lzma_filters_free() which can be convenient for freeing |
|
the filter options in a filter chain (an array of lzma_filter |
|
structures). |
|
|
|
- lzma_file_info_decoder() to makes it a little easier to get |
|
the Index field from .xz files. This helps in getting the |
|
uncompressed file size but an easy-to-use random access |
|
API is still missing which has existed in XZ for Java for |
|
a long time. |
|
|
|
- Added lzma_microlzma_encoder() and lzma_microlzma_decoder(). |
|
It is used by erofs-utils and may be used by others too. |
|
|
|
The MicroLZMA format is a raw LZMA stream (without end marker) |
|
whose first byte (always 0x00) has been replaced with |
|
bitwise-negation of the LZMA properties (lc/lp/pb). It was |
|
created for use in EROFS but may be used in other contexts |
|
as well where it is important to avoid wasting bytes for |
|
stream headers or footers. The format is also supported by |
|
XZ Embedded (the XZ Embedded version in Linux got MicroLZMA |
|
support in Linux 5.16). |
|
|
|
The MicroLZMA encoder API in liblzma can compress into a |
|
fixed-sized output buffer so that as much data is compressed |
|
as can be fit into the buffer while still creating a valid |
|
MicroLZMA stream. This is needed for EROFS. |
|
|
|
- Added lzma_lzip_decoder() to decompress the .lz (lzip) file |
|
format version 0 and the original unextended version 1 files. |
|
Also lzma_auto_decoder() supports .lz files. |
|
|
|
- lzma_filters_update() can now be used with the multi-threaded |
|
encoder (lzma_stream_encoder_mt()) to change the filter chain |
|
after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH. |
|
|
|
- In lzma_options_lzma, allow nice_len = 2 and 3 with the match |
|
finders that require at least 3 or 4. Now it is internally |
|
rounded up if needed. |
|
|
|
- CLMUL-based CRC64 on x86-64 and E2K with runtime processor |
|
detection. On 32-bit x86 it currently isn't available unless |
|
|
|
CRC64 slower; this might be fixed in the future. |
|
|
|
- Building with |
|
is now thread-safe if the compiler supports |
|
__attribute__((__constructor__)). |
|
|
|
* xz: |
|
|
|
- Using -T0 ( |
|
even on a single-core system. This is to ensure that output |
|
from the same xz binary is identical on both single-core and |
|
multi-core systems. |
|
|
|
- |
|
multi-threaded mode while using only one worker thread. |
|
The + is ignored if the number is not 1. |
|
|
|
- A default soft memory usage limit is now used for compression |
|
when -T0 is used and no explicit limit has been specified. |
|
This soft limit is used to restrict the number of threads |
|
but if the limit is exceeded with even one thread then xz |
|
will continue with one thread using the multi-threaded |
|
encoder and this limit is ignored. If the number of threads |
|
is specified manually then no default limit will be used; |
|
this affects only -T0. |
|
|
|
This change helps on systems that have very many cores and |
|
using all of them for xz makes no sense. Previously xz -T0 |
|
could run out of memory on such systems because it attempted |
|
to reserve memory for too many threads. |
|
|
|
This also helps with 32-bit builds which don't have a large |
|
amount of address space that would be required for many |
|
threads. The default soft limit for -T0 is at most 1400 MiB |
|
on all 32-bit platforms. |
|
|
|
- Previously a low value in |
|
xz to switch from multi-threaded mode to single-threaded mode |
|
if the limit cannot otherwise be met; xz failed instead. Now |
|
xz can switch to single-threaded mode and then, if needed, |
|
scale down the LZMA2 dictionary size too just like it already |
|
did when it was started in single-threaded mode. |
|
|
|
- The option |
|
the number of threads as that doesn't affect the compressed |
|
output (only performance). Now |
|
adjustments that affect compressed output, that is, with |
|
|
|
single-threaded mode and won't scale down the LZMA2 |
|
dictionary size. |
|
|
|
- Added a new option |
|
used to limit the number of decompressor threads (possibly |
|
falling back to single-threaded mode) but it will never make |
|
xz refuse to decompress a file. This has a system-specific |
|
default value because without any limit xz could end up |
|
allocating memory for the whole compressed input file, the |
|
whole uncompressed output file, multiple thread-specific |
|
decompressor instances and so on. Basically xz could |
|
attempt to use an insane amount of memory even with fairly |
|
common files. The system-specific default value is currently |
|
the same as the one used for compression with -T0. |
|
|
|
The new option works together with the existing option |
|
|
|
that must not be exceeded (xz will refuse to decompress) |
|
while the new option only restricts the number of threads. |
|
If the limit set with |
|
than the limit set with |
|
value is used also for |
|
|
|
- Added new information to the output of xz |
|
new fields to the output of xz |
|
|
|
- In |
|
now that liblzma handles it. |
|
|
|
- Don't mention endianness for ARM and ARM-Thumb filters in |
|
|
|
instruction encoding but modern ARM processors using |
|
big endian data access still use little endian |
|
instruction encoding. So the help text was misleading. |
|
In contrast, the PowerPC filter is only for big endian |
|
32/64-bit PowerPC code. Little endian PowerPC would need |
|
a separate filter. |
|
|
|
- Added decompression support for the .lz (lzip) file format |
|
version 0 and the original unextended version 1. It is |
|
autodetected by default. See also the option |
|
the xz man page. |
|
|
|
- Sandboxing enabled by default: |
|
* Capsicum (FreeBSD) |
|
* pledge(2) (OpenBSD) |
|
|
|
* Scripts now support the .lz format using xz. |
|
|
|
* A few new tests were added. |
|
|
|
* The liblzma-specific tests are now supported in CMake-based |
|
builds too ("make test"). |
|
|
|
|
|
5.3.5beta (2022-12-01) |
|
|
|
* All fixes from 5.2.9. |
|
|
|
* liblzma: |
|
|
|
- Added new LZMA_FILTER_LZMA1EXT for raw encoder and decoder to |
|
handle raw LZMA1 streams that don't have end of payload marker |
|
(EOPM) alias end of stream (EOS) marker. It can be used in |
|
filter chains, for example, with the x86 BCJ filter. |
|
|
|
- Added lzma_str_to_filters(), lzma_str_from_filters(), and |
|
lzma_str_list_filters() to make it easier for applications |
|
to get custom compression options from a user and convert |
|
it to an array of lzma_filter structures. |
|
|
|
- Added lzma_filters_free(). |
|
|
|
- lzma_filters_update() can now be used with the multi-threaded |
|
encoder (lzma_stream_encoder_mt()) to change the filter chain |
|
after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH. |
|
|
|
- In lzma_options_lzma, allow nice_len = 2 and 3 with the match |
|
finders that require at least 3 or 4. Now it is internally |
|
rounded up if needed. |
|
|
|
- ARM64 filter was modified. It is still experimental. |
|
|
|
- Fixed LTO build with Clang if -fgnuc-version=10 or similar |
|
was used to make Clang look like GCC >= 10. Now it uses |
|
__has_attribute(__symver__) which should be reliable. |
|
|
|
* xz: |
|
|
|
- |
|
mode while using only one worker thread. |
|
|
|
- In |
|
now that liblzma handles it. |
|
|
|
* Updated translations: Chinese (simplified), Korean, and Turkish. |
|
|
|
|
|
5.3.4alpha (2022-11-15) |
|
|
|
* All fixes from 5.2.7 and 5.2.8. |
|
|
|
* liblzma: |
|
|
|
- Minor improvements to the threaded decoder. |
|
|
|
- Added CRC64 implementation that uses SSSE3, SSE4.1, and CLMUL |
|
instructions on 32/64-bit x86 and E2K. On 32-bit x86 it's |
|
not enabled unless |
|
the non-CLMUL code might be slower. Processor support is |
|
detected at runtime so this is built by default on x86-64 |
|
and E2K. On these platforms, if compiler flags indicate |
|
unconditional CLMUL support (-msse4.1 -mpclmul) then the |
|
generic version is not built, making liblzma 8-9 KiB smaller |
|
compared to having both versions included. |
|
|
|
With extremely compressible files this can make decompression |
|
up to twice as fast but with typical files 5 % improvement |
|
is a more realistic expectation. |
|
|
|
The CLMUL version is slower than the generic version with |
|
tiny inputs (especially at 1-8 bytes per call, but up to |
|
16 bytes). In normal use in xz this doesn't matter at all. |
|
|
|
- Added an experimental ARM64 filter. This is *not* the final |
|
version! Files created with this experimental version won't |
|
be supported in the future versions! The filter design is |
|
a compromise where improving one use case makes some other |
|
cases worse. |
|
|
|
- Added decompression support for the .lz (lzip) file format |
|
version 0 and the original unextended version 1. See the |
|
API docs of lzma_lzip_decoder() for details. Also |
|
lzma_auto_decoder() supports .lz files. |
|
|
|
- Building with |
|
is now thread-safe if the compiler supports |
|
__attribute__((__constructor__)) |
|
|
|
* xz: |
|
|
|
- Added support for OpenBSD's pledge(2) as a sandboxing method. |
|
|
|
- Don't mention endianness for ARM and ARM-Thumb filters in |
|
|
|
instruction encoding but modern ARM processors using |
|
big endian data access still use little endian |
|
instruction encoding. So the help text was misleading. |
|
In contrast, the PowerPC filter is only for big endian |
|
32/64-bit PowerPC code. Little endian PowerPC would need |
|
a separate filter. |
|
|
|
- Added |
|
filter is finished. Files created with this experimental |
|
filter will not be supported in the future! |
|
|
|
- Added new fields to the output of xz |
|
|
|
- Added decompression support for the .lz (lzip) file format |
|
version 0 and the original unextended version 1. It is |
|
autodetected by default. See also the option |
|
the xz man page. |
|
|
|
* Scripts now support the .lz format using xz. |
|
|
|
* Build systems: |
|
|
|
- New |
|
HAVE_DECODER_ARM64, HAVE_LZIP_DECODER, HAVE_CPUID_H, |
|
HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR, HAVE_USABLE_CLMUL |
|
|
|
- New configure options: |
|
|
|
'pledge' is now an option in |
|
it's autodetected by default anyway). |
|
|
|
- INSTALL was updated to document the new configure options. |
|
|
|
- PACKAGERS now lists also |
|
|
|
not be used in builds for non-embedded use. |
|
|
|
* Tests: |
|
|
|
- Fix some of the tests so that they skip instead of fail if |
|
certain features have been disabled with configure options. |
|
It's still not perfect. |
|
|
|
- Other improvements to tests. |
|
|
|
* Updated translations: Croatian, Finnish, Hungarian, Polish, |
|
Romanian, Spanish, Swedish, and Ukrainian. |
|
|
|
|
|
5.3.3alpha (2022-08-22) |
|
|
|
* All fixes from 5.2.6. |
|
|
|
* liblzma: |
|
|
|
- Fixed 32-bit build. |
|
|
|
- Added threaded .xz decompressor lzma_stream_decoder_mt(). |
|
It can use multiple threads with .xz files that have multiple |
|
Blocks with size information in Block Headers. The threaded |
|
encoder in xz has always created such files. |
|
|
|
Single-threaded encoder cannot store the size information in |
|
Block Headers even if one used LZMA_FULL_FLUSH to create |
|
multiple Blocks, so this threaded decoder cannot use multiple |
|
threads with such files. |
|
|
|
If there are multiple Streams (concatenated .xz files), one |
|
Stream will be decompressed completely before starting the |
|
next Stream. |
|
|
|
- A new decoder flag LZMA_FAIL_FAST was added. It makes the |
|
threaded decompressor report errors soon instead of first |
|
flushing all pending data before the error location. |
|
|
|
* xz: |
|
|
|
- Using -T0 ( |
|
even on a single-core system. This is to ensure that output |
|
from the same xz binary is identical on both single-core and |
|
multi-core systems. |
|
|
|
- A default soft memory usage limit is now used for compression |
|
when -T0 is used and no explicit limit has been specified. |
|
This soft limit is used to restrict the number of threads |
|
but if the limit is exceeded with even one thread then xz |
|
will continue with one thread using the multi-threaded |
|
encoder and this limit is ignored. If the number of threads |
|
is specified manually then no default limit will be used; |
|
this affects only -T0. |
|
|
|
This change helps on systems that have very many cores and |
|
using all of them for xz makes no sense. Previously xz -T0 |
|
could run out of memory on such systems because it attempted |
|
to reserve memory for too many threads. |
|
|
|
This also helps with 32-bit builds which don't have a large |
|
amount of address space that would be required for many |
|
threads. The default limit is 1400 MiB on all 32-bit |
|
platforms with -T0. |
|
|
|
Now xz -T0 should just work. It might use too few threads |
|
in some cases but at least it shouldn't easily run out of |
|
memory. It's possible that this will be tweaked before 5.4.0. |
|
|
|
- Changes to |
|
|
|
In single-threaded mode, |
|
scale down the LZMA2 dictionary size to meet the memory usage |
|
limit. This obviously affects the compressed output. However, |
|
if xz was in threaded mode, |
|
reduce the number of threads but it wouldn't make xz switch |
|
from multi-threaded mode to single-threaded mode or scale |
|
down the LZMA2 dictionary size. This seemed illogical. |
|
|
|
Now |
|
mode if one thread in multi-threaded mode uses too much |
|
memory. If memory usage is still too high, then the LZMA2 |
|
dictionary size can be scaled down too. |
|
|
|
The option |
|
prevents xz from scaling down the number of threads as that |
|
doesn't affect compressed output (only performance). After |
|
this commit |
|
compressed output, that is, with |
|
from multithreaded mode to single-threaded mode and won't |
|
scale down the LZMA2 dictionary size. |
|
|
|
- Added a new option |
|
used to limit the number of decompressor threads (possibly |
|
falling back to single-threaded mode) but it will never make |
|
xz refuse to decompress a file. This has a system-specific |
|
default value because without any limit xz could end up |
|
allocating memory for the whole compressed input file, the |
|
whole uncompressed output file, multiple thread-specific |
|
decompressor instances and so on. Basically xz could |
|
attempt to use an insane amount of memory even with fairly |
|
common files. |
|
|
|
The new option works together with the existing option |
|
|
|
that must not be exceeded (xz will refuse to decompress) |
|
while the new option only restricts the number of threads. |
|
If the limit set with |
|
than the limit set with |
|
value is used also for |
|
|
|
* Tests: |
|
|
|
- Added a few more tests. |
|
|
|
- Added tests/code_coverage.sh to create a code coverage report |
|
of the tests. |
|
|
|
* Build systems: |
|
|
|
- Automake's parallel test harness is now used to make tests |
|
finish faster. |
|
|
|
- Added the CMake files to the distribution tarball. These were |
|
supposed to be in 5.2.5 already. |
|
|
|
- Added liblzma tests to the CMake build. |
|
|
|
- Windows: Fix building of liblzma.dll with the included |
|
Visual Studio project files. |
|
|
|
|
|
5.3.2alpha (2021-10-28) |
|
|
|
This release was made on short notice so that recent erofs-utils can |
|
be built with LZMA support without needing a snapshot from xz.git. |
|
Thus many pending things were not included, not even updated |
|
translations (which would need to be updated for the new |
|
strings anyway). |
|
|
|
* All fixes from 5.2.5. |
|
|
|
* xz: |
|
|
|
- When copying metadata from the source file to the destination |
|
file, don't try to set the group (GID) if it is already set |
|
correctly. This avoids a failure on OpenBSD (and possibly on |
|
a few other OSes) where files may get created so that their |
|
group doesn't belong to the user, and fchown(2) can fail even |
|
if it needs to do nothing. |
|
|
|
- The |
|
setuid, setgid, and sticky files. Previously this required |
|
using |
|
|
|
- Split the long strings used in |
|
to make them much easier for translators. |
|
|
|
- If built with sandbox support and enabling the sandbox fails, |
|
xz will now immediately exit with exit status of 1. Previously |
|
it would only display a warning if -vv was used. |
|
|
|
- Cap |
|
MIPS32 userspace processes are limited to 2 GiB of address |
|
space. |
|
|
|
* liblzma: |
|
|
|
- Added lzma_microlzma_encoder() and lzma_microlzma_decoder(). |
|
The API is in lzma/container.h. |
|
|
|
The MicroLZMA format is a raw LZMA stream (without end marker) |
|
whose first byte (always 0x00) has been replaced with |
|
bitwise-negation of the LZMA properties (lc/lp/pb). It was |
|
created for use in EROFS but may be used in other contexts |
|
as well where it is important to avoid wasting bytes for |
|
stream headers or footers. The format is also supported by |
|
XZ Embedded. |
|
|
|
The MicroLZMA encoder API in liblzma can compress into a |
|
fixed-sized output buffer so that as much data is compressed |
|
as can be fit into the buffer while still creating a valid |
|
MicroLZMA stream. This is needed for EROFS. |
|
|
|
- Added fuzzing support. |
|
|
|
- Support Intel Control-flow Enforcement Technology (CET) in |
|
32-bit x86 assembly files. |
|
|
|
- Visual Studio: Use non-standard _MSVC_LANG to detect C++ |
|
standard version in the lzma.h API header. It's used to |
|
detect when "noexcept" can be used. |
|
|
|
* Scripts: |
|
|
|
- Fix exit status of xzdiff/xzcmp. Exit status could be 2 when |
|
the correct value is 1. |
|
|
|
- Fix exit status of xzgrep. |
|
|
|
- Detect corrupt .bz2 files in xzgrep. |
|
|
|
- Add zstd support to xzgrep and xzdiff/xzcmp. |
|
|
|
- Fix less(1) version detection in xzless. It failed if the |
|
version number from "less -V" contained a dot. |
|
|
|
* Fix typos and technical issues in man pages. |
|
|
|
* Build systems: |
|
|
|
- Windows: Fix building of resource files when config.h isn't |
|
used. CMake + Visual Studio can now build liblzma.dll. |
|
|
|
- Various fixes to the CMake support. It might still need a few |
|
more fixes even for liblzma-only builds. |
|
|
|
|
|
5.3.1alpha (2018-04-29) |
|
|
|
* All fixes from 5.2.4. |
|
|
|
* Add lzma_file_info_decoder() into liblzma and use it in xz to |
|
implement the |
|
|
|
* Capsicum sandbox support is enabled by default where available |
|
(FreeBSD >= 10). |
|
|
|
|
|
5.2.10 (2022-12-13) |
|
|
|
* xz: Don't modify argv[] when parsing the |
|
|
|
arguments in process listing (like "ps auxf"). |
|
|
|
* GNU/Linux only: Use __has_attribute(__symver__) to detect if |
|
that attribute is supported. This fixes build on Mandriva where |
|
Clang is patched to define __GNUC__ to 11 by default (instead |
|
of 4 as used by Clang upstream). |
|
|
|
|
|
5.2.9 (2022-11-30) |
|
|
|
* liblzma: |
|
|
|
- Fixed an infinite loop in LZMA encoder initialization |
|
if dict_size >= 2 GiB. (The encoder only supports up |
|
to 1536 MiB.) |
|
|
|
- Fixed two cases of invalid free() that can happen if |
|
a tiny allocation fails in encoder re-initialization |
|
or in lzma_filters_update(). These bugs had some |
|
similarities with the bug fixed in 5.2.7. |
|
|
|
- Fixed lzma_block_encoder() not allowing the use of |
|
LZMA_SYNC_FLUSH with lzma_code() even though it was |
|
documented to be supported. The sync-flush code in |
|
the Block encoder was already used internally via |
|
lzma_stream_encoder(), so this was just a missing flag |
|
in the lzma_block_encoder() API function. |
|
|
|
- GNU/Linux only: Don't put symbol versions into static |
|
liblzma as it breaks things in some cases (and even if |
|
it didn't break anything, symbol versions in static |
|
libraries are useless anyway). The downside of the fix |
|
is that if the configure options |
|
are used then it's not possible to build both shared and |
|
static liblzma at the same time on GNU/Linux anymore; |
|
with those options |
|
must be used too. |
|
|
|
* New email address for bug reports is <[email protected]> which |
|
forwards messages to Lasse Collin and Jia Tan. |
|
|
|
|
|
5.2.8 (2022-11-13) |
|
|
|
* xz: |
|
|
|
- If xz cannot remove an input file when it should, this |
|
is now treated as a warning (exit status 2) instead of |
|
an error (exit status 1). This matches GNU gzip and it |
|
is more logical as at that point the output file has |
|
already been successfully closed. |
|
|
|
- Fix handling of .xz files with an unsupported check type. |
|
Previously such printed a warning message but then xz |
|
behaved as if an error had occurred (didn't decompress, |
|
exit status 1). Now a warning is printed, decompression |
|
is done anyway, and exit status is 2. This used to work |
|
slightly before 5.0.0. In practice this bug matters only |
|
if xz has been built with some check types disabled. As |
|
instructed in PACKAGERS, such builds should be done in |
|
special situations only. |
|
|
|
- Fix "xz -dc --single-stream tests/files/good-0-empty.xz" |
|
which failed with "Internal error (bug)". That is, |
|
|
|
the input file didn't contain any uncompressed data. |
|
|
|
- Fix displaying file sizes in the progress indicator when |
|
working in passthru mode and there are multiple input files. |
|
Just like "gzip -cdf", "xz -cdf" works like "cat" when the |
|
input file isn't a supported compressed file format. In |
|
this case the file size counters weren't reset between |
|
files so with multiple input files the progress indicator |
|
displayed an incorrect (too large) value. |
|
|
|
* liblzma: |
|
|
|
- API docs in lzma/container.h: |
|
* Update the list of decoder flags in the decoder |
|
function docs. |
|
* Explain LZMA_CONCATENATED behavior with .lzma files |
|
in lzma_auto_decoder() docs. |
|
|
|
- OpenBSD: Use HW_NCPUONLINE to detect the number of |
|
available hardware threads in lzma_physmem(). |
|
|
|
- Fix use of wrong macro to detect x86 SSE2 support. |
|
__SSE2_MATH__ was used with GCC/Clang but the correct |
|
one is __SSE2__. The first one means that SSE2 is used |
|
for floating point math which is irrelevant here. |
|
The affected SSE2 code isn't used on x86-64 so this affects |
|
only 32-bit x86 builds that use -msse2 without -mfpmath=sse |
|
(there is no runtime detection for SSE2). It improves LZMA |
|
compression speed (not decompression). |
|
|
|
- Fix the build with Intel C compiler 2021 (ICC, not ICX) |
|
on Linux. It defines __GNUC__ to 10 but doesn't support |
|
the __symver__ attribute introduced in GCC 10. |
|
|
|
* Scripts: Ignore warnings from xz by using |
|
This is needed if the input .xz files use an unsupported |
|
check type. |
|
|
|
* Translations: |
|
|
|
- Updated Croatian and Turkish translations. |
|
|
|
- One new translations wasn't included because it needed |
|
technical fixes. It will be in upcoming 5.4.0. No new |
|
translations will be added to the 5.2.x branch anymore. |
|
|
|
- Renamed the French man page translation file from |
|
fr_FR.po to fr.po and thus also its install directory |
|
(like /usr/share/man/fr_FR -> .../fr). |
|
|
|
- Man page translations for upcoming 5.4.0 are now handled |
|
in the Translation Project. |
|
|
|
* Update doc/faq.txt a little so it's less out-of-date. |
|
|
|
|
|
5.2.7 (2022-09-30) |
|
|
|
* liblzma: |
|
|
|
- Made lzma_filters_copy() to never modify the destination |
|
array if an error occurs. lzma_stream_encoder() and |
|
lzma_stream_encoder_mt() already assumed this. Before this |
|
change, if a tiny memory allocation in lzma_filters_copy() |
|
failed it would lead to a crash (invalid free() or invalid |
|
memory reads) in the cleanup paths of these two encoder |
|
initialization functions. |
|
|
|
- Added missing integer overflow check to lzma_index_append(). |
|
This affects xz |
|
the Index field from .xz files using lzma_index_decoder(). |
|
Normal decompression of .xz files doesn't call this code |
|
and thus most applications using liblzma aren't affected |
|
by this bug. |
|
|
|
- Single-threaded .xz decoder (lzma_stream_decoder()): If |
|
lzma_code() returns LZMA_MEMLIMIT_ERROR it is now possible |
|
to use lzma_memlimit_set() to increase the limit and continue |
|
decoding. This was supposed to work from the beginning |
|
but there was a bug. With other decoders (.lzma or |
|
threaded .xz decoder) this already worked correctly. |
|
|
|
- Fixed accumulation of integrity check type statistics in |
|
lzma_index_cat(). This bug made lzma_index_checks() return |
|
only the type of the integrity check of the last Stream |
|
when multiple lzma_indexes were concatenated. Most |
|
applications don't use these APIs but in xz it made |
|
xz |
|
files. In xz |
|
lines were affected and in xz |
|
line was affected. |
|
|
|
- Added ABI compatibility with executables that were linked |
|
against liblzma in RHEL/CentOS 7 or other liblzma builds |
|
that had copied the problematic patch from RHEL/CentOS 7 |
|
(xz-5.2.2-compat-libs.patch). For the details, see the |
|
comment at the top of src/liblzma/validate_map.sh. |
|
|
|
WARNING: This uses __symver__ attribute with GCC >= 10. |
|
In other cases the traditional __asm__(".symver ...") |
|
is used. Using link-time optimization (LTO, -flto) with |
|
GCC versions older than 10 can silently result in |
|
broken liblzma.so.5 (incorrect symbol versions)! If you |
|
want to use -flto with GCC, you must use GCC >= 10. |
|
LTO with Clang seems to work even with the traditional |
|
__asm__(".symver ...") method. |
|
|
|
* xzgrep: Fixed compatibility with old shells that break if |
|
comments inside command substitutions have apostrophes ('). |
|
This problem was introduced in 5.2.6. |
|
|
|
* Build systems: |
|
|
|
- New |
|
|
|
- Windows: Fixed liblzma.dll build with Visual Studio project |
|
files. It broke in 5.2.6 due to a change that was made to |
|
improve CMake support. |
|
|
|
- Windows: Building liblzma with UNICODE defined should now |
|
work. |
|
|
|
- CMake files are now actually included in the release tarball. |
|
They should have been in 5.2.5 already. |
|
|
|
- Minor CMake fixes and improvements. |
|
|
|
* Added a new translation: Turkish |
|
|
|
|
|
5.2.6 (2022-08-12) |
|
|
|
* xz: |
|
|
|
- The |
|
setuid, setgid, and sticky files. Previously this required |
|
using |
|
|
|
- When copying metadata from the source file to the destination |
|
file, don't try to set the group (GID) if it is already set |
|
correctly. This avoids a failure on OpenBSD (and possibly on |
|
a few other OSes) where files may get created so that their |
|
group doesn't belong to the user, and fchown(2) can fail even |
|
if it needs to do nothing. |
|
|
|
- Cap |
|
MIPS32 because on MIPS32 userspace processes are limited |
|
to 2 GiB of address space. |
|
|
|
* liblzma: |
|
|
|
- Fixed a missing error-check in the threaded encoder. If a |
|
small memory allocation fails, a .xz file with an invalid |
|
Index field would be created. Decompressing such a file would |
|
produce the correct output but result in an error at the end. |
|
Thus this is a "mild" data corruption bug. Note that while |
|
a failed memory allocation can trigger the bug, it cannot |
|
cause invalid memory access. |
|
|
|
- The decoder for .lzma files now supports files that have |
|
uncompressed size stored in the header and still use the |
|
end of payload marker (end of stream marker) at the end |
|
of the LZMA stream. Such files are rare but, according to |
|
the documentation in LZMA SDK, they are valid. |
|
doc/lzma-file-format.txt was updated too. |
|
|
|
- Improved 32-bit x86 assembly files: |
|
* Support Intel Control-flow Enforcement Technology (CET) |
|
* Use non-executable stack on FreeBSD. |
|
|
|
- Visual Studio: Use non-standard _MSVC_LANG to detect C++ |
|
standard version in the lzma.h API header. It's used to |
|
detect when "noexcept" can be used. |
|
|
|
* xzgrep: |
|
|
|
- Fixed arbitrary command injection via a malicious filename |
|
(CVE-2022-1271, ZDI-CAN-16587). A standalone patch for |
|
this was released to the public on 2022-04-07. A slight |
|
robustness improvement has been made since then and, if |
|
using GNU or *BSD grep, a new faster method is now used |
|
that doesn't use the old sed-based construct at all. This |
|
also fixes bad output with GNU grep >= 3.5 (2020-09-27) |
|
when xzgrepping binary files. |
|
|
|
This vulnerability was discovered by: |
|
cleemy desu wayo working with Trend Micro Zero Day Initiative |
|
|
|
- Fixed detection of corrupt .bz2 files. |
|
|
|
- Improved error handling to fix exit status in some situations |
|
and to fix handling of signals: in some situations a signal |
|
didn't make xzgrep exit when it clearly should have. It's |
|
possible that the signal handling still isn't quite perfect |
|
but hopefully it's good enough. |
|
|
|
- Documented exit statuses on the man page. |
|
|
|
- xzegrep and xzfgrep now use "grep -E" and "grep -F" instead |
|
of the deprecated egrep and fgrep commands. |
|
|
|
- Fixed parsing of the options -E, -F, -G, -P, and -X. The |
|
problem occurred when multiple options were specied in |
|
a single argument, for example, |
|
|
|
echo foo | xzgrep -Fe foo |
|
|
|
treated foo as a filename because -Fe wasn't correctly |
|
split into -F -e. |
|
|
|
- Added zstd support. |
|
|
|
* xzdiff/xzcmp: |
|
|
|
- Fixed wrong exit status. Exit status could be 2 when the |
|
correct value is 1. |
|
|
|
- Documented on the man page that exit status of 2 is used |
|
for decompression errors. |
|
|
|
- Added zstd support. |
|
|
|
* xzless: |
|
|
|
- Fix less(1) version detection. It failed if the version number |
|
from "less -V" contained a dot. |
|
|
|
* Translations: |
|
|
|
- Added new translations: Catalan, Croatian, Esperanto, |
|
Korean, Portuguese, Romanian, Serbian, Spanish, Swedish, |
|
and Ukrainian |
|
|
|
- Updated the Brazilian Portuguese translation. |
|
|
|
- Added French man page translation. This and the existing |
|
German translation aren't complete anymore because the |
|
English man pages got a few updates and the translators |
|
weren't reached so that they could update their work. |
|
|
|
* Build systems: |
|
|
|
- Windows: Fix building of resource files when config.h isn't |
|
used. CMake + Visual Studio can now build liblzma.dll. |
|
|
|
- Various fixes to the CMake support. Building static or shared |
|
liblzma should work fine in most cases. In contrast, building |
|
the command line tools with CMake is still clearly incomplete |
|
and experimental and should be used for testing only. |
|
|
|
|
|
5.2.5 (2020-03-17) |
|
|
|
* liblzma: |
|
|
|
- Fixed several C99/C11 conformance bugs. Now the code is clean |
|
under gcc/clang -fsanitize=undefined. Some of these changes |
|
might have a negative effect on performance with old GCC |
|
versions or compilers other than GCC and Clang. The configure |
|
option |
|
restore the old behavior but it shouldn't normally be used. |
|
|
|
- Improved API documentation of lzma_properties_decode(). |
|
|
|
- Added a very minor encoder speed optimization. |
|
|
|
* xz: |
|
|
|
- Fixed a crash in "xz -dcfv not_an_xz_file". All four options |
|
were required to trigger it. The crash occurred in the |
|
progress indicator code when xz was in passthru mode where |
|
xz works like "cat". |
|
|
|
- Fixed an integer overflow with 32-bit off_t. It could happen |
|
when decompressing a file that has a long run of zero bytes |
|
which xz would try to write as a sparse file. Since the build |
|
system enables large file support by default, off_t is |
|
normally 64-bit even on 32-bit systems. |
|
|
|
- Fixes for |
|
* Fix semi-busy-waiting. |
|
* Avoid unneeded flushes when no new input has arrived |
|
since the previous flush was completed. |
|
|
|
- Added a special case for 32-bit xz: If |
|
used to specify a limit that exceeds 4020 MiB, the limit will |
|
be set to 4020 MiB. The values "0" and "max" aren't affected |
|
by this and neither is decompression. This hack can be |
|
helpful when a 32-bit xz has access to 4 GiB address space |
|
but the specified memlimit exceeds 4 GiB. This can happen |
|
e.g. with some scripts. |
|
|
|
- Capsicum sandbox is now enabled by default where available |
|
(FreeBSD >= 10). The sandbox debug messages (xz -vv) were |
|
removed since they seemed to be more annoying than useful. |
|
|
|
- DOS build now requires DJGPP 2.05 instead of 2.04beta. |
|
A workaround for a locale problem with DJGPP 2.05 was added. |
|
|
|
* xzgrep and other scripts: |
|
|
|
- Added a configure option |
|
It is disabled by default except on Solaris where the default |
|
is /usr/xpg4/bin. See INSTALL for details. |
|
|
|
- Added a workaround for a POSIX shell detection problem on |
|
Solaris. |
|
|
|
* Build systems: |
|
|
|
- Added preliminary build instructions for z/OS. See INSTALL |
|
section 1.2.9. |
|
|
|
- Experimental CMake support was added. It should work to build |
|
static liblzma on a few operating systems. It may or may not |
|
work to build shared liblzma. On some platforms it can build |
|
xz and xzdec too but those are only for testing. See the |
|
comment in the beginning of CMakeLists.txt for details. |
|
|
|
- Visual Studio project files were updated. |
|
WindowsTargetPlatformVersion was removed from VS2017 files |
|
and set to "10.0" in the added VS2019 files. In the future |
|
the VS project files will be removed when CMake support is |
|
good enough. |
|
|
|
- New |
|
HAVE___BUILTIN_BSWAPXX, and TUKLIB_USE_UNSAFE_TYPE_PUNNING. |
|
|
|
- autogen.sh has a new optional dependency on po4a and a new |
|
option |
|
wants to remake the build files. po4a is used to update the |
|
translated man pages but as long as the man pages haven't |
|
been modified, there's nothing to update and one can use |
|
|
|
|
|
* Translations: |
|
|
|
- XZ Utils translations are now handled by the Translation |
|
Project: https://translationproject.org/domain/xz.html |
|
|
|
- All man pages are now included in German too. |
|
|
|
- New xz translations: Brazilian Portuguese, Finnish, |
|
Hungarian, Chinese (simplified), Chinese (traditional), |
|
and Danish (partial translation) |
|
|
|
- Updated xz translations: French, German, Italian, and Polish |
|
|
|
- Unfortunately a few new xz translations weren't included due |
|
to technical problems like too long lines in |
|
misaligned column headings in tables. In the future, many of |
|
these strings will be split and e.g. the table column |
|
alignment will be handled in software. This should make the |
|
strings easier to translate. |
|
|
|
|
|
5.2.4 (2018-04-29) |
|
|
|
* liblzma: |
|
|
|
- Allow 0 as memory usage limit instead of returning |
|
LZMA_PROG_ERROR. Now 0 is treated as if 1 byte was specified, |
|
which effectively is the same as 0. |
|
|
|
- Use "noexcept" keyword instead of "throw()" in the public |
|
headers when a C++11 (or newer standard) compiler is used. |
|
|
|
- Added a portability fix for recent Intel C Compilers. |
|
|
|
- Microsoft Visual Studio build files have been moved under |
|
windows/vs2013 and windows/vs2017. |
|
|
|
* xz: |
|
|
|
- Fix "xz --list --robot missing_or_bad_file.xz" which would |
|
try to print an uninitialized string and thus produce garbage |
|
output. Since the exit status is non-zero, most uses of such |
|
a command won't try to interpret the garbage output. |
|
|
|
- "xz --list foo.xz" could print "Internal error (bug)" in a |
|
corner case where a specific memory usage limit had been set. |
|
|
|
|
|
5.2.3 (2016-12-30) |
|
|
|
* xz: |
|
|
|
- Always close a file before trying to delete it to avoid |
|
problems on some operating system and file system combinations. |
|
|
|
- Fixed copying of file timestamps on Windows. |
|
|
|
- Added experimental (disabled by default) sandbox support using |
|
Capsicum (FreeBSD >= 10). See |
|
|
|
* C99/C11 conformance fixes to liblzma. The issues affected at least |
|
some builds using link-time optimizations. |
|
|
|
* Fixed bugs in the rarely-used function lzma_index_dup(). |
|
|
|
* Use of external SHA-256 code is now disabled by default. |
|
It can still be enabled by passing |
|
to configure. The reasons to disable it by default (see INSTALL |
|
for more details): |
|
|
|
- Some OS-specific SHA-256 implementations conflict with |
|
OpenSSL and cause problems in programs that link against both |
|
liblzma and libcrypto. At least FreeBSD 10 and MINIX 3.3.0 |
|
are affected. |
|
|
|
- The internal SHA-256 is faster than the SHA-256 code in |
|
some operating systems. |
|
|
|
* Changed CPU core count detection to use sched_getaffinity() on |
|
GNU/Linux and GNU/kFreeBSD. |
|
|
|
* Fixes to the build-system and xz to make xz buildable even when |
|
encoders, decoders, or threading have been disabled from libilzma |
|
using configure options. These fixes added two new |
|
config.h: HAVE_ENCODERS and HAVE_DECODERS. |
|
|
|
|
|
5.2.2 (2015-09-29) |
|
|
|
* Fixed bugs in QNX-specific code. |
|
|
|
* Omitted the use of pipe2() even if it is available to avoid |
|
portability issues with some old Linux and glibc combinations. |
|
|
|
* Updated German translation. |
|
|
|
* Added project files to build static and shared liblzma (not the |
|
whole XZ Utils) with Visual Studio 2013 update 2 or later. |
|
|
|
* Documented that threaded decompression hasn't been implemented |
|
yet. A 5.2.0 NEWS entry describing multi-threading support had |
|
incorrectly said "decompression" when it should have said |
|
"compression". |
|
|
|
|
|
5.2.1 (2015-02-26) |
|
|
|
* Fixed a compression-ratio regression in fast mode of LZMA1 and |
|
LZMA2. The bug is present in 5.1.4beta and 5.2.0 releases. |
|
|
|
* Fixed a portability problem in xz that affected at least OpenBSD. |
|
|
|
* Fixed xzdiff to be compatible with FreeBSD's mktemp which differs |
|
from most other mktemp implementations. |
|
|
|
* Changed CPU core count detection to use cpuset_getaffinity() on |
|
FreeBSD. |
|
|
|
|
|
5.2.0 (2014-12-21) |
|
|
|
Since 5.1.4beta: |
|
|
|
* All fixes from 5.0.8 |
|
|
|
* liblzma: Fixed lzma_stream_encoder_mt_memusage() when a preset |
|
was used. |
|
|
|
* xzdiff: If mktemp isn't installed, mkdir will be used as |
|
a fallback to create a temporary directory. Installing mktemp |
|
is still recommended. |
|
|
|
* Updated French, German, Italian, Polish, and Vietnamese |
|
translations. |
|
|
|
Summary of fixes and new features added in the 5.1.x development |
|
releases: |
|
|
|
* liblzma: |
|
|
|
- Added support for multi-threaded compression. See the |
|
lzma_mt structure, lzma_stream_encoder_mt(), and |
|
lzma_stream_encoder_mt_memusage() in <lzma/container.h>, |
|
lzma_get_progress() in <lzma/base.h>, and lzma_cputhreads() |
|
in <lzma/hardware.h> for details. |
|
|
|
- Made the uses of lzma_allocator const correct. |
|
|
|
- Added lzma_block_uncomp_encode() to create uncompressed |
|
.xz Blocks using LZMA2 uncompressed chunks. |
|
|
|
- Added support for LZMA_IGNORE_CHECK. |
|
|
|
- A few speed optimizations were made. |
|
|
|
- Added support for symbol versioning. It is enabled by default |
|
on GNU/Linux, other GNU-based systems, and FreeBSD. |
|
|
|
- liblzma (not the whole XZ Utils) should now be buildable |
|
with MSVC 2013 update 2 or later using windows/config.h. |
|
|
|
* xz: |
|
|
|
- Fixed a race condition in the signal handling. It was |
|
possible that e.g. the first SIGINT didn't make xz exit |
|
if reading or writing blocked and one had bad luck. The fix |
|
is non-trivial, so as of writing it is unknown if it will be |
|
backported to the v5.0 branch. |
|
|
|
- Multi-threaded compression can be enabled with the |
|
|
|
[Fixed: This originally said "decompression".] |
|
|
|
- New command line options in xz: |
|
|
|
|
|
|
|
- xz -lvv now shows the minimum xz version that is required to |
|
decompress the file. Currently it is 5.0.0 for all supported |
|
.xz files except files with empty LZMA2 streams require 5.0.2. |
|
|
|
* xzdiff and xzgrep now support .lzo files if lzop is installed. |
|
The .tzo suffix is also recognized as a shorthand for .tar.lzo. |
|
|
|
|
|
5.1.4beta (2014-09-14) |
|
|
|
* All fixes from 5.0.6 |
|
|
|
* liblzma: Fixed the use of presets in threaded encoder |
|
initialization. |
|
|
|
* xz |
|
in single-threaded mode. Previously the combination only |
|
worked in multi-threaded mode. |
|
|
|
* Added support for LZMA_IGNORE_CHECK to liblzma and made it |
|
available in xz as |
|
|
|
* liblzma speed optimizations: |
|
|
|
- Initialization of a new LZMA1 or LZMA2 encoder has been |
|
optimized. (The speed of reinitializing an already-allocated |
|
encoder isn't affected.) This helps when compressing many |
|
small buffers with lzma_stream_buffer_encode() and other |
|
similar situations where an already-allocated encoder state |
|
isn't reused. This speed-up is visible in xz too if one |
|
compresses many small files one at a time instead running xz |
|
once and giving all files as command-line arguments. |
|
|
|
- Buffer comparisons are now much faster when unaligned access |
|
is allowed (configured with |
|
speeds up encoding significantly. There is arch-specific code |
|
for 32-bit and 64-bit x86 (32-bit needs SSE2 for the best |
|
results and there's no run-time CPU detection for now). |
|
For other archs there is only generic code which probably |
|
isn't as optimal as arch-specific solutions could be. |
|
|
|
- A few speed optimizations were made to the SHA-256 code. |
|
(Note that the builtin SHA-256 code isn't used on all |
|
operating systems.) |
|
|
|
* liblzma can now be built with MSVC 2013 update 2 or later |
|
using windows/config.h. |
|
|
|
* Vietnamese translation was added. |
|
|
|
|
|
5.1.3alpha (2013-10-26) |
|
|
|
* All fixes from 5.0.5 |
|
|
|
* liblzma: |
|
|
|
- Fixed a deadlock in the threaded encoder. |
|
|
|
- Made the uses of lzma_allocator const correct. |
|
|
|
- Added lzma_block_uncomp_encode() to create uncompressed |
|
.xz Blocks using LZMA2 uncompressed chunks. |
|
|
|
- Added support for native threads on Windows and the ability |
|
to detect the number of CPU cores. |
|
|
|
* xz: |
|
|
|
- Fixed a race condition in the signal handling. It was |
|
possible that e.g. the first SIGINT didn't make xz exit |
|
if reading or writing blocked and one had bad luck. The fix |
|
is non-trivial, so as of writing it is unknown if it will be |
|
backported to the v5.0 branch. |
|
|
|
- Made the progress indicator work correctly in threaded mode. |
|
|
|
- Threaded encoder now works together with |
|
|
|
- Added preliminary support for |
|
It can be useful for (somewhat) real-time streaming. For |
|
now the decompression side has to be done with something |
|
else than the xz tool due to how xz does buffering, but this |
|
should be fixed. |
|
|
|
|
|
5.1.2alpha (2012-07-04) |
|
|
|
* All fixes from 5.0.3 and 5.0.4 |
|
|
|
* liblzma: |
|
|
|
- Fixed a deadlock and an invalid free() in the threaded encoder. |
|
|
|
- Added support for symbol versioning. It is enabled by default |
|
on GNU/Linux, other GNU-based systems, and FreeBSD. |
|
|
|
- Use SHA-256 implementation from the operating system if one is |
|
available in libc, libmd, or libutil. liblzma won't use e.g. |
|
OpenSSL or libgcrypt to avoid introducing new dependencies. |
|
|
|
- Fixed liblzma.pc for static linking. |
|
|
|
- Fixed a few portability bugs. |
|
|
|
* xz |
|
successful decompression. Now the following works: |
|
|
|
echo foo | xz > foo.xz |
|
echo bar | xz >> foo.xz |
|
( xz -dc |
|
|
|
Note that it doesn't work if the input is not seekable |
|
or if there is Stream Padding between the concatenated |
|
.xz Streams. |
|
|
|
* xz -lvv now shows the minimum xz version that is required to |
|
decompress the file. Currently it is 5.0.0 for all supported .xz |
|
files except files with empty LZMA2 streams require 5.0.2. |
|
|
|
* Added an *incomplete* implementation of |
|
It only works correctly in single-threaded mode and when |
|
|
|
specifying the sizes of Blocks which can be useful e.g. when |
|
creating files for random-access reading. |
|
|
|
|
|
5.1.1alpha (2011-04-12) |
|
|
|
* All fixes from 5.0.2 |
|
|
|
* liblzma fixes that will also be included in 5.0.3: |
|
|
|
- A memory leak was fixed. |
|
|
|
- lzma_stream_buffer_encode() no longer creates an empty .xz |
|
Block if encoding an empty buffer. Such an empty Block with |
|
LZMA2 data would trigger a bug in 5.0.1 and older (see the |
|
first bullet point in 5.0.2 notes). When releasing 5.0.2, |
|
I thought that no encoder creates this kind of files but |
|
I was wrong. |
|
|
|
- Validate function arguments better in a few functions. Most |
|
importantly, specifying an unsupported integrity check to |
|
lzma_stream_buffer_encode() no longer creates a corrupt .xz |
|
file. Probably no application tries to do that, so this |
|
shouldn't be a big problem in practice. |
|
|
|
- Document that lzma_block_buffer_encode(), |
|
lzma_easy_buffer_encode(), lzma_stream_encoder(), and |
|
lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK. |
|
|
|
- The return values of the _memusage() functions are now |
|
documented better. |
|
|
|
* Support for multithreaded compression was added using the simplest |
|
method, which splits the input data into blocks and compresses |
|
them independently. Other methods will be added in the future. |
|
The current method has room for improvement, e.g. it is possible |
|
to reduce the memory usage. |
|
|
|
* Added the options |
|
|
|
* xzdiff and xzgrep now support .lzo files if lzop is installed. |
|
The .tzo suffix is also recognized as a shorthand for .tar.lzo. |
|
|
|
* Support for short 8.3 filenames under DOS was added to xz. It is |
|
experimental and may change before it gets into a stable release. |
|
|
|
|
|
5.0.8 (2014-12-21) |
|
|
|
* Fixed an old bug in xzgrep that affected OpenBSD and probably |
|
a few other operating systems too. |
|
|
|
* Updated French and German translations. |
|
|
|
* Added support for detecting the amount of RAM on AmigaOS/AROS. |
|
|
|
* Minor build system updates. |
|
|
|
|
|
5.0.7 (2014-09-20) |
|
|
|
* Fix regressions introduced in 5.0.6: |
|
|
|
- Fix building with non-GNU make. |
|
|
|
- Fix invalid Libs.private value in liblzma.pc which broke |
|
static linking against liblzma if the linker flags were |
|
taken from pkg-config. |
|
|
|
|
|
5.0.6 (2014-09-14) |
|
|
|
* xzgrep now exits with status 0 if at least one file matched. |
|
|
|
* A few minor portability and build system fixes |
|
|
|
|
|
5.0.5 (2013-06-30) |
|
|
|
* lzmadec and liblzma's lzma_alone_decoder(): Support decompressing |
|
.lzma files that have less common settings in the headers |
|
(dictionary size other than 2^n or 2^n + 2^(n-1), or uncompressed |
|
size greater than 256 GiB). The limitations existed to avoid false |
|
positives when detecting .lzma files. The lc + lp <= 4 limitation |
|
still remains since liblzma's LZMA decoder has that limitation. |
|
|
|
NOTE: xz's .lzma support or liblzma's lzma_auto_decoder() are NOT |
|
affected by this change. They still consider uncommon .lzma headers |
|
as not being in the .lzma format. Changing this would give way too |
|
many false positives. |
|
|
|
* xz: |
|
|
|
- Interaction of preset and custom filter chain options was |
|
made less illogical. This affects only certain less typical |
|
uses cases so few people are expected to notice this change. |
|
|
|
Now when a custom filter chain option (e.g. |
|
specified, all preset options (-0 ... -9, -e) earlier are on |
|
the command line are completely forgotten. Similarly, when |
|
a preset option is specified, all custom filter chain options |
|
earlier on the command line are completely forgotten. |
|
|
|
Example 1: "xz -9 --lzma2=preset=5 -e" is equivalent to "xz -e" |
|
which is equivalent to "xz -6e". Earlier -e didn't put xz back |
|
into preset mode and thus the example command was equivalent |
|
to "xz --lzma2=preset=5". |
|
|
|
Example 2: "xz -9e --lzma2=preset=5 -7" is equivalent to |
|
"xz -7". Earlier a custom filter chain option didn't make |
|
xz forget the -e option so the example was equivalent to |
|
"xz -7e". |
|
|
|
- Fixes and improvements to error handling. |
|
|
|
- Various fixes to the man page. |
|
|
|
* xzless: Fixed to work with "less" versions 448 and later. |
|
|
|
* xzgrep: Made -h an alias for |
|
|
|
* Include the previously missing debug/translation.bash which can |
|
be useful for translators. |
|
|
|
* Include a build script for Mac OS X. This has been in the Git |
|
repository since 2010 but due to a mistake in Makefile.am the |
|
script hasn't been included in a release tarball before. |
|
|
|
|
|
5.0.4 (2012-06-22) |
|
|
|
* liblzma: |
|
|
|
- Fix lzma_index_init(). It could crash if memory allocation |
|
failed. |
|
|
|
- Fix the possibility of an incorrect LZMA_BUF_ERROR when a BCJ |
|
filter is used and the application only provides exactly as |
|
much output space as is the uncompressed size of the file. |
|
|
|
- Fix a bug in doc/examples_old/xz_pipe_decompress.c. It didn't |
|
check if the last call to lzma_code() really returned |
|
LZMA_STREAM_END, which made the program think that truncated |
|
files are valid. |
|
|
|
- New example programs in doc/examples (old programs are now in |
|
doc/examples_old). These have more comments and more detailed |
|
error handling. |
|
|
|
* Fix "xz -lvv foo.xz". It could crash on some corrupted files. |
|
|
|
* Fix output of "xz --robot -lv" and "xz --robot -lvv" which |
|
incorrectly printed the filename also in the "foo (x/x)" format. |
|
|
|
* Fix exit status of "xzdiff foo.xz bar.xz". |
|
|
|
* Fix exit status of "xzgrep foo binary_file". |
|
|
|
* Fix portability to EBCDIC systems. |
|
|
|
* Fix a configure issue on AIX with the XL C compiler. See INSTALL |
|
for details. |
|
|
|
* Update French, German, Italian, and Polish translations. |
|
|
|
|
|
5.0.3 (2011-05-21) |
|
|
|
* liblzma fixes: |
|
|
|
- A memory leak was fixed. |
|
|
|
- lzma_stream_buffer_encode() no longer creates an empty .xz |
|
Block if encoding an empty buffer. Such an empty Block with |
|
LZMA2 data would trigger a bug in 5.0.1 and older (see the |
|
first bullet point in 5.0.2 notes). When releasing 5.0.2, |
|
I thought that no encoder creates this kind of files but |
|
I was wrong. |
|
|
|
- Validate function arguments better in a few functions. Most |
|
importantly, specifying an unsupported integrity check to |
|
lzma_stream_buffer_encode() no longer creates a corrupt .xz |
|
file. Probably no application tries to do that, so this |
|
shouldn't be a big problem in practice. |
|
|
|
- Document that lzma_block_buffer_encode(), |
|
lzma_easy_buffer_encode(), lzma_stream_encoder(), and |
|
lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK. |
|
|
|
- The return values of the _memusage() functions are now |
|
documented better. |
|
|
|
* Fix command name detection in xzgrep. xzegrep and xzfgrep now |
|
correctly use egrep and fgrep instead of grep. |
|
|
|
* French translation was added. |
|
|
|
|
|
5.0.2 (2011-04-01) |
|
|
|
* LZMA2 decompressor now correctly accepts LZMA2 streams with no |
|
uncompressed data. Previously it considered them corrupt. The |
|
bug can affect applications that use raw LZMA2 streams. It is |
|
very unlikely to affect .xz files because no compressor creates |
|
.xz files with empty LZMA2 streams. (Empty .xz files are a |
|
different thing than empty LZMA2 streams.) |
|
|
|
* "xz --suffix=.foo filename.foo" now refuses to compress the |
|
file due to it already having the suffix .foo. It was already |
|
documented on the man page, but the code lacked the test. |
|
|
|
* "xzgrep -l foo bar.xz" works now. |
|
|
|
* Polish translation was added. |
|
|
|
|
|
5.0.1 (2011-01-29) |
|
|
|
* xz |
|
or sticky bit set and files that have multiple hard links. |
|
The man page had it documented this way already, but the code |
|
had a bug. |
|
|
|
* gzip and bzip2 support in xzdiff was fixed. |
|
|
|
* Portability fixes |
|
|
|
* Minor fix to Czech translation |
|
|
|
|
|
5.0.0 (2010-10-23) |
|
|
|
Only the most important changes compared to 4.999.9beta are listed |
|
here. One change is especially important: |
|
|
|
* The memory usage limit is now disabled by default. Some scripts |
|
written before this change may have used |
|
line or in XZ_OPT. THESE USES OF |
|
NOW, because they interfere with user's ability to set the memory |
|
usage limit himself. If user-specified limit causes problems to |
|
your script, blame the user. |
|
|
|
Other significant changes: |
|
|
|
* Added support for XZ_DEFAULTS environment variable. This variable |
|
allows users to set default options for xz, e.g. default memory |
|
usage limit or default compression level. Scripts that use xz |
|
must never set or unset XZ_DEFAULTS. Scripts should use XZ_OPT |
|
instead if they need a way to pass options to xz via an |
|
environment variable. |
|
|
|
* The compression settings associated with the preset levels |
|
-0 ... -9 have been changed. |
|
It is now less likely to make compression worse, but with some |
|
files the new |
|
|
|
|
|
* If a preset level (-0 ... -9) is specified after a custom filter |
|
chain options have been used (e.g. |
|
chain will be forgotten. Earlier the preset options were |
|
completely ignored after custom filter chain options had been |
|
seen. |
|
|
|
* xz will create sparse files when decompressing if the uncompressed |
|
data contains long sequences of binary zeros. This is done even |
|
when writing to standard output that is connected to a regular |
|
file and certain additional conditions are met to make it safe. |
|
|
|
* Support for "xz --list" was added. Combine with |
|
|
|
|
|
* I had hoped that liblzma API would have been stable after |
|
4.999.9beta, but there have been a couple of changes in the |
|
advanced features, which don't affect most applications: |
|
|
|
- Index handling code was revised. If you were using the old |
|
API, you will get a compiler error (so it's easy to notice). |
|
|
|
- A subtle but important change was made to the Block handling |
|
API. lzma_block.version has to be initialized even for |
|
lzma_block_header_decode(). Code that doesn't do it will work |
|
for now, but might break in the future, which makes this API |
|
change easy to miss. |
|
|
|
* The major soname has been bumped to 5.0.0. liblzma API and ABI |
|
are now stable, so the need to recompile programs linking against |
|
liblzma shouldn't arise soon. |
|
|
|
|