Spaces:
Runtime error
Runtime error
| XZ Utils Release Notes | |
| ====================== | |
| 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 <xz@tukaani.org> 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. | |