Spaces:
Running
Running
XZ Utils Release Notes | |
====================== | |
5.2.10 (2022-12-13) | |
* xz: Don't modify argv[] when parsing the --memlimit* and | |
--block-list command line options. This fixes confusing | |
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 --with-pic or --without-pic | |
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 --disable-static or --disable-shared | |
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, | |
--single-stream was broken if the first .xz stream in | |
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 --quiet --no-warn. | |
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 --list and other applications that decode | |
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 --list not list all check types from concatenated .xz | |
files. In xz --list --verbose only the per-file "Check:" | |
lines were affected and in xz --robot --list only the "file" | |
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 #define in config.h: HAVE_SYMBOL_VERSIONS_LINUX | |
- 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 --keep option now accepts symlinks, hardlinks, and | |
setuid, setgid, and sticky files. Previously this required | |
using --force. | |
- 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 --memlimit-compress to 2000 MiB instead of 4020 MiB on | |
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 --enable-unsafe-type-punning can be used to (mostly) | |
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 --flush-timeout: | |
* 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 --memlimit-compress is | |
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 --enable-path-for-scripts=PREFIX. | |
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 #defines in config.h: HAVE___BUILTIN_ASSUME_ALIGNED, | |
HAVE___BUILTIN_BSWAPXX, and TUKLIB_USE_UNSAFE_TYPE_PUNNING. | |
- autogen.sh has a new optional dependency on po4a and a new | |
option --no-po4a to skip that step. This matters only if one | |
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 | |
--no-po4a to avoid the dependency on po4a. | |
* 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 --help output or | |
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 --enable-sandbox in INSTALL. | |
* 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 --enable-external-sha256 | |
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 #defines to | |
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 | |
--threads (-T) option. | |
[Fixed: This originally said "decompression".] | |
- New command line options in xz: --single-stream, | |
--block-size=SIZE, --block-list=SIZES, | |
--flush-timeout=TIMEOUT, and --ignore-check. | |
- 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 --block-list and --block-size can now be used together | |
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 --ignore-check. | |
* 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 --enable-unaligned-access). This | |
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 --block-list=SIZES. | |
- Added preliminary support for --flush-timeout=TIMEOUT. | |
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 --decompress --single-stream now fixes the input position after | |
successful decompression. Now the following works: | |
echo foo | xz > foo.xz | |
echo bar | xz >> foo.xz | |
( xz -dc --single-stream ; xz -dc --single-stream ) < foo.xz | |
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 --block-list=SIZES to xz. | |
It only works correctly in single-threaded mode and when | |
--block-size isn't used at the same time. --block-list allows | |
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 --single-stream and --block-size=SIZE to xz. | |
* 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. --lzma2) is | |
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 --no-filename. | |
* 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 --force now (de)compresses files that have setuid, setgid, | |
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 --memory=max on xz command | |
line or in XZ_OPT. THESE USES OF --memory=max SHOULD BE REMOVED | |
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. --extreme was changed a little too. | |
It is now less likely to make compression worse, but with some | |
files the new --extreme may compress slightly worse than the old | |
--extreme. | |
* If a preset level (-0 ... -9) is specified after a custom filter | |
chain options have been used (e.g. --lzma2), the custom filter | |
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 --verbose or | |
--verbose --verbose (-vv) for detailed output. | |
* 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. | |