jpayne@68: jpayne@68: XZ Utils Release Notes jpayne@68: ====================== jpayne@68: jpayne@68: 5.6.4 (2025-01-23) jpayne@68: jpayne@68: * liblzma: Fix LZMA/LZMA2 encoder on big endian ARM64. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Fix --filters= and --filters1= ... --filters9= options jpayne@68: parsing. They require an argument, thus "xz --filters lzma2" jpayne@68: should work in addition to "xz --filters=lzma2". jpayne@68: jpayne@68: - On the man page, note in the --compress and --decompress jpayne@68: options that the default behavior is to delete the input jpayne@68: file unless writing to standard output. It was already jpayne@68: documented in the DESCRIPTION section but new users in jpayne@68: a hurry might miss it. jpayne@68: jpayne@68: * Windows (native builds, not Cygwin): Fix regressions introduced jpayne@68: in XZ Utils 5.6.3 which caused non-ASCII characters to display jpayne@68: incorrectly. Only builds with translation support were affected jpayne@68: (--enable-nls or ENABLE_NLS=ON). The following changes affect jpayne@68: builds that have translations enabled: jpayne@68: jpayne@68: - Require UCRT because MSVCRT doesn't support UTF-8 jpayne@68: locales and thus translations won't be readable on jpayne@68: Windows 10 version 1903 and later. (MSVCRT builds jpayne@68: are still possible with --disable-nls or ENABLE_NLS=OFF.) jpayne@68: jpayne@68: - Require gettext-runtime >= 0.23.1 because older versions jpayne@68: don't autodetect the use of the UTF-8 code page. This jpayne@68: resulted in garbled non-ASCII characters even with UCRT. jpayne@68: jpayne@68: - Partially fix alignment issues in xz --verbose --list jpayne@68: with translated messages. Chinese (simplified), jpayne@68: Chinese (traditional), and Korean column headings jpayne@68: are misaligned still because Windows and MinGW-w64 jpayne@68: don't provide wcwidth() and XZ Utils doesn't include jpayne@68: a replacement function either. jpayne@68: jpayne@68: * CMake: Explicitly disable unity builds. This prevents build jpayne@68: failures when another project uses XZ Utils via CMake's jpayne@68: FetchContent module, and that project enables unity builds. jpayne@68: jpayne@68: * Update Chinese (traditional) and Serbian translations. jpayne@68: jpayne@68: jpayne@68: 5.6.3 (2024-10-01) jpayne@68: jpayne@68: IMPORTANT: This includes a Windows-specific security fix to jpayne@68: the command line tools (CVE-2024-47611). liblzma isn't affected jpayne@68: by this issue. jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Fix x86-64 inline assembly compatibility with GNU Binutils jpayne@68: older than 2.27. jpayne@68: jpayne@68: - Fix the build with GCC 4.2 on OpenBSD/sparc64. jpayne@68: jpayne@68: * xzdec: Display an error instead of failing silently if the jpayne@68: unsupported option -M is specified. jpayne@68: jpayne@68: * lzmainfo: Fix integer overflows when rounding the dictionary and jpayne@68: uncompressed sizes to the nearest mebibyte. jpayne@68: jpayne@68: * Windows (except Cygwin and MSYS2): Add an application manifest to jpayne@68: xz, xzdec, lzmadec, and lzmainfo executables: jpayne@68: jpayne@68: - Declare them compatible with Vista/7/8/8.1/10/11. This way jpayne@68: the programs won't needlessly use Operating System Context jpayne@68: of Vista when running on later Windows versions. This setting jpayne@68: doesn't mean that the executables cannot run on even older jpayne@68: versions if otherwise built that way. jpayne@68: jpayne@68: - Declare them as UAC-compliant. MSVC added this by default jpayne@68: already but it wasn't done with MinGW-w64, at least not jpayne@68: with all toolchain variants. jpayne@68: jpayne@68: - Declare them long path aware. This makes long path names jpayne@68: work on Windows 10 and 11 if the feature has been enabled jpayne@68: in the Windows registry. jpayne@68: jpayne@68: - Use the UTF-8 code page on Windows 10 version 1903 and later. jpayne@68: jpayne@68: * Now command line tools can access files whose names jpayne@68: contain characters that don't exist in the current jpayne@68: legacy code page. jpayne@68: jpayne@68: * The options --files and --files0 now expect file lists jpayne@68: to be in UTF-8 instead of the legacy code page. jpayne@68: jpayne@68: * This fixes a security issue: If a command line contains jpayne@68: Unicode characters (for example, filenames) that don't jpayne@68: exist in the current legacy code page, the characters are jpayne@68: converted to similar-looking characters with best-fit jpayne@68: mapping. Some best-fit mappings result in ASCII jpayne@68: characters that change the meaning of the command line, jpayne@68: which can be exploited with malicious filenames to do jpayne@68: argument injection or directory traversal attacks. jpayne@68: UTF-8 avoids best-fit mappings and thus fixes the issue. jpayne@68: (CVE-2024-47611) jpayne@68: jpayne@68: Forcing the process code page to UTF-8 is possible only jpayne@68: on Windows 10 version 1903 and later. The command line jpayne@68: tools remain vulnerable if used on an old older jpayne@68: version of Windows. jpayne@68: jpayne@68: This issue was discovered by Orange Tsai and splitline jpayne@68: from DEVCORE Research Team. jpayne@68: jpayne@68: A related smaller issue remains: Windows filenames may jpayne@68: contain unpaired surrogates (invalid UTF-16). These are jpayne@68: converted to the replacement character U+FFFD in the jpayne@68: UTF-8 code page. Thus, filenames with different unpaired jpayne@68: surrogates appear identical and aren't distinguishable jpayne@68: from filenames that contain the actual replacement jpayne@68: character U+FFFD. jpayne@68: jpayne@68: * When building with MinGW-w64, it is recommended to use jpayne@68: UCRT version instead of the old MSVCRT. For example, jpayne@68: non-ASCII characters from filenames won't print jpayne@68: correctly in messages to console with MSVCRT with jpayne@68: the UTF-8 code page (a cosmetic issue). liblzma-only jpayne@68: builds are still fine with MSVCRT. jpayne@68: jpayne@68: - Cygwin and MSYS2 process command line options differently and jpayne@68: the above issues don't exist. There is no need to replace the jpayne@68: default application manifest on Cygwin and MSYS2. jpayne@68: jpayne@68: * Autotools-based build: jpayne@68: jpayne@68: - Fix feature checks with link-time optimization (-flto). jpayne@68: jpayne@68: - Solaris: Fix a compatibility issue in version.sh. It matters jpayne@68: if one wants to regenerate configure by running autoconf. jpayne@68: jpayne@68: * CMake: jpayne@68: jpayne@68: - Use paths relative to ${prefix} in liblzma.pc when possible. jpayne@68: This is done only with CMake >= 3.20. jpayne@68: jpayne@68: - MSVC: Install liblzma.pc as it can be useful with MSVC too. jpayne@68: jpayne@68: - Windows: Fix liblzma filename prefix, for example: jpayne@68: jpayne@68: * Cygwin: The DLL was incorrectly named liblzma-5.dll. jpayne@68: Now it is cyglzma-5.dll. jpayne@68: jpayne@68: * MSVC: Rename import library from liblzma.lib to lzma.lib jpayne@68: while keeping liblzma.dll name as is. This helps with jpayne@68: "pkgconf --msvc-syntax --libs liblzma" because it mungles jpayne@68: "-llzma" in liblzma.pc to "lzma.lib". jpayne@68: jpayne@68: * MinGW-w64: No changes. jpayne@68: jpayne@68: - Windows: Use the correct resource file for lzmadec.exe. jpayne@68: Previously the resource file for xzdec.exe was used for both. jpayne@68: Autotools-based build isn't affected. jpayne@68: jpayne@68: - Prefer a C11 compiler over a C99 compiler but accept both. jpayne@68: jpayne@68: - Link Threads::Threads against liblzma using PRIVATE so that jpayne@68: -pthread and such flags won't unnecessarily get included in jpayne@68: the usage requirements of shared liblzma. That is, jpayne@68: target_link_libraries(foo PRIVATE liblzma::liblzma) no jpayne@68: longer adds -pthread if using POSIX threads and linking jpayne@68: against shared liblzma. The threading flags are still added jpayne@68: if linking against static liblzma. jpayne@68: jpayne@68: * Updated translations: Catalan, Chinese (simplified), and jpayne@68: Brazilian Portuguese. jpayne@68: jpayne@68: jpayne@68: 5.6.2 (2024-05-29) jpayne@68: jpayne@68: * Remove the backdoor (CVE-2024-3094). jpayne@68: jpayne@68: * Not changed: Memory sanitizer (MSAN) has a false positive jpayne@68: in the CRC CLMUL code which also makes OSS Fuzz unhappy. jpayne@68: Valgrind is smarter and doesn't complain. jpayne@68: jpayne@68: A revision to the CLMUL code is coming anyway and this issue jpayne@68: will be cleaned up as part of it. It won't be backported to jpayne@68: 5.6.x or 5.4.x because the old code isn't wrong. There is jpayne@68: no reason to risk introducing regressions in old branches jpayne@68: just to silence a false positive. jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - lzma_index_decoder() and lzma_index_buffer_decode(): Fix jpayne@68: a missing output pointer initialization (*i = NULL) if the jpayne@68: functions are called with invalid arguments. The API docs jpayne@68: say that such an initialization is always done. In practice jpayne@68: this matters very little because the problem can only occur jpayne@68: if the calling application has a bug and these functions jpayne@68: return LZMA_PROG_ERROR. jpayne@68: jpayne@68: - lzma_str_to_filters(): Fix a missing output pointer jpayne@68: initialization (*error_pos = 0). This is very similar jpayne@68: to the fix above. jpayne@68: jpayne@68: - Fix C standard conformance with function pointer types. jpayne@68: jpayne@68: - Remove GNU indirect function (IFUNC) support. This is *NOT* jpayne@68: done for security reasons even though the backdoor relied on jpayne@68: this code. The performance benefits of IFUNC are too tiny in jpayne@68: this project to make the extra complexity worth it. jpayne@68: jpayne@68: - FreeBSD on ARM64: Add error checking to CRC32 instruction jpayne@68: support detection. jpayne@68: jpayne@68: - Fix building with NVIDIA HPC SDK. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Fix a C standard conformance issue in --block-list parsing jpayne@68: (arithmetic on a null pointer). jpayne@68: jpayne@68: - Fix a warning from GNU groff when processing the man page: jpayne@68: "warning: cannot select font 'CW'" jpayne@68: jpayne@68: * xzdec: Add support for Linux Landlock ABI version 4. xz already jpayne@68: had the v3-to-v4 change but it had been forgotten from xzdec. jpayne@68: jpayne@68: * Autotools-based build system (configure): jpayne@68: jpayne@68: - Symbol versioning variant can now be overridden with jpayne@68: --enable-symbol-versions. Documentation in INSTALL was jpayne@68: updated to match. jpayne@68: jpayne@68: - Add new configure option --enable-doxygen to enable jpayne@68: generation and installation of the liblzma API documentation jpayne@68: using Doxygen. Documentation in INSTALL and PACKAGERS was jpayne@68: updated to match. jpayne@68: jpayne@68: CMake: jpayne@68: jpayne@68: - Fix detection of Linux Landlock support. The detection code jpayne@68: in CMakeLists.txt had been sabotaged. jpayne@68: jpayne@68: - Disable symbol versioning on non-glibc Linux to match what jpayne@68: the Autotools build does. For example, symbol versioning jpayne@68: isn't enabled with musl. jpayne@68: jpayne@68: - Symbol versioning variant can now be overridden by setting jpayne@68: SYMBOL_VERSIONING to "OFF", "generic", or "linux". jpayne@68: jpayne@68: - Add support for all tests in typical build configurations. jpayne@68: Now the only difference to the tests coverage to Autotools jpayne@68: is that CMake-based build will skip more tests if features jpayne@68: are disabled. Such builds are only for special cases like jpayne@68: embedded systems. jpayne@68: jpayne@68: - Separate the CMake code for the tests into tests/tests.cmake. jpayne@68: It is used conditionally, thus it is possible to jpayne@68: jpayne@68: rm -rf tests jpayne@68: jpayne@68: and the CMake-based build will still work normally except jpayne@68: that no tests are then available. jpayne@68: jpayne@68: - Add a option ENABLE_DOXYGEN to enable generation and jpayne@68: installation of the liblzma API documentation using Doxygen. jpayne@68: jpayne@68: * Documentation: jpayne@68: jpayne@68: - Omit the Doxygen-generated liblzma API documentation from the jpayne@68: package. Instead, the generation and installation of the API jpayne@68: docs can be enabled with a configure or CMake option if jpayne@68: Doxygen is available. jpayne@68: jpayne@68: - Remove the XZ logo which was used in the API documentation. jpayne@68: The logo has been retired and isn't used by the project jpayne@68: anymore. However, it's OK to use it in contexts that refer jpayne@68: to the backdoor incident. jpayne@68: jpayne@68: - Remove the PDF versions of the man pages from the source jpayne@68: package. These existed primarily for users of operating jpayne@68: systems which don't come with tools to render man page jpayne@68: source files. The plain text versions are still included jpayne@68: in doc/man/txt. PDF files can still be generated to doc/man, jpayne@68: if the required tools are available, using "make pdf" after jpayne@68: running "configure". jpayne@68: jpayne@68: - Update home page URLs back to their old locations on jpayne@68: tukaani.org. jpayne@68: jpayne@68: - Update maintainer info. jpayne@68: jpayne@68: * Tests: jpayne@68: jpayne@68: - In tests/files/README, explain how to recreate the ARM64 jpayne@68: test files. jpayne@68: jpayne@68: - Remove two tests that used tiny x86 and SPARC object files jpayne@68: as the input files. The matching .c file was included but jpayne@68: the object files aren't easy to reproduce. The test cases jpayne@68: weren't great anyway; they were from the early days (2009) jpayne@68: of the project when the test suite had very few tests. jpayne@68: jpayne@68: - Improve a few tests. jpayne@68: jpayne@68: jpayne@68: 5.6.1 (2024-03-09) jpayne@68: jpayne@68: IMPORTANT: This fixed bugs in the backdoor (CVE-2024-3094) (someone jpayne@68: had forgot to run Valgrind). jpayne@68: jpayne@68: * liblzma: Fixed two bugs relating to GNU indirect function (IFUNC) jpayne@68: with GCC. The more serious bug caused a program linked with jpayne@68: liblzma to crash on start up if the flag -fprofile-generate was jpayne@68: used to build liblzma. The second bug caused liblzma to falsely jpayne@68: report an invalid write to Valgrind when loading liblzma. jpayne@68: jpayne@68: * xz: Changed the messages for thread reduction due to memory jpayne@68: constraints to only appear under the highest verbosity level. jpayne@68: jpayne@68: * Build: jpayne@68: jpayne@68: - Fixed a build issue when the header file jpayne@68: was present on the system but the Landlock system calls were jpayne@68: not defined in . jpayne@68: jpayne@68: - The CMake build now warns and disables NLS if both gettext jpayne@68: tools and pre-created .gmo files are missing. Previously, jpayne@68: this caused the CMake build to fail. jpayne@68: jpayne@68: * Minor improvements to man pages. jpayne@68: jpayne@68: * Minor improvements to tests. jpayne@68: jpayne@68: jpayne@68: 5.6.0 (2024-02-24) jpayne@68: jpayne@68: IMPORTANT: This added a backdoor (CVE-2024-3094). It's enabled only jpayne@68: in the release tarballs. jpayne@68: jpayne@68: This bumps the minor version of liblzma because new features were jpayne@68: added. The API and ABI are still backward compatible with liblzma jpayne@68: 5.4.x and 5.2.x and 5.0.x. jpayne@68: jpayne@68: NOTE: As described in the NEWS for 5.5.2beta, the core components jpayne@68: are now under the BSD Zero Clause License (0BSD). jpayne@68: jpayne@68: Since 5.5.2beta: jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Disabled the branchless C variant in the LZMA decoder based jpayne@68: on the benchmark results from the community. jpayne@68: jpayne@68: - Disabled x86-64 inline assembly on x32 to fix the build. jpayne@68: jpayne@68: * Sandboxing support in xz: jpayne@68: jpayne@68: - Landlock is now used even when xz needs to create files. jpayne@68: In this case the sandbox has to be more permissive than jpayne@68: when no files need to be created. A similar thing was jpayne@68: already in use with pledge(2) since 5.3.4alpha. jpayne@68: jpayne@68: - Landlock and pledge(2) are now stricter when reading from jpayne@68: more than one input file and only writing to standard output. jpayne@68: jpayne@68: - Added support for Landlock ABI version 4. jpayne@68: jpayne@68: * CMake: jpayne@68: jpayne@68: - Default to -O2 instead of -O3 with CMAKE_BUILD_TYPE=Release. jpayne@68: -O3 is not useful for speed and makes the code larger. jpayne@68: jpayne@68: - Now builds lzmainfo and lzmadec. jpayne@68: jpayne@68: - xzdiff, xzgrep, xzless, xzmore, and their symlinks are now jpayne@68: installed. The scripts are also tested during "make test". jpayne@68: jpayne@68: - Added translation support for xz, lzmainfo, and the jpayne@68: man pages. jpayne@68: jpayne@68: - Applied the symbol versioning workaround for MicroBlaze that jpayne@68: is used in the Autotools build. jpayne@68: jpayne@68: - The general XZ Utils and liblzma API documentation is now jpayne@68: installed. jpayne@68: jpayne@68: - The CMake component names were changed a little and several jpayne@68: were added. liblzma_Runtime and liblzma_Development are jpayne@68: unchanged. jpayne@68: jpayne@68: - Minimum required CMake version is now 3.14. However, jpayne@68: translation support is disabled with CMake versions jpayne@68: older than 3.20. jpayne@68: jpayne@68: - The CMake-based build is now close to feature parity with the jpayne@68: Autotools-based build. Most importantly a few tests aren't jpayne@68: run yet. Testing the CMake-based build on different operating jpayne@68: systems would be welcome now. See the comment at the top of jpayne@68: CMakeLists.txt. jpayne@68: jpayne@68: * Fixed a bug in the Autotools feature test for ARM64 CRC32 jpayne@68: instruction support for old versions of Clang. This did not jpayne@68: affect the CMake build. jpayne@68: jpayne@68: * Windows: jpayne@68: jpayne@68: - The build instructions in INSTALL and windows/INSTALL*.txt jpayne@68: were revised completely. jpayne@68: jpayne@68: - windows/build-with-cmake.bat along with the instructions jpayne@68: in windows/INSTALL-MinGW-w64_with_CMake.txt should make jpayne@68: it very easy to build liblzma.dll and xz.exe on Windows jpayne@68: using CMake and MinGW-w64 with either GCC or Clang/LLVM. jpayne@68: jpayne@68: - windows/build.bash was updated. It now works on MSYS2 and jpayne@68: on GNU/Linux (cross-compiling) to create a .zip and .7z jpayne@68: package for 32-bit and 64-bit x86 using GCC + MinGW-w64. jpayne@68: jpayne@68: * The TODO file is no longer installed as part of the jpayne@68: documentation. The file is out of date and does not reflect jpayne@68: the actual tasks that will be completed in the future. jpayne@68: jpayne@68: * Translations: jpayne@68: jpayne@68: - Translated lzmainfo man pages are now installed. These jpayne@68: had been forgotten in earlier versions. jpayne@68: jpayne@68: - Updated Croatian, Esperanto, German, Hungarian, Korean, jpayne@68: Polish, Romanian, Spanish, Swedish, Vietnamese, and Ukrainian jpayne@68: translations. jpayne@68: jpayne@68: - Updated German, Korean, Romanian, and Ukrainian man page jpayne@68: translations. jpayne@68: jpayne@68: * Added a few tests. jpayne@68: jpayne@68: Summary of new features added in the 5.5.x development releases: jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - LZMA decoder: Speed optimizations to the C code and jpayne@68: added GCC & Clang compatible inline assembly for x86-64. jpayne@68: jpayne@68: - Added lzma_mt_block_size() to recommend a Block size for jpayne@68: multithreaded encoding. jpayne@68: jpayne@68: - Added CLMUL-based CRC32 on x86-64 and E2K with runtime jpayne@68: processor detection. Similar to CRC64, on 32-bit x86 it jpayne@68: isn't available unless --disable-assembler is used. jpayne@68: jpayne@68: - Optimized the CRC32 calculation on ARM64 platforms using the jpayne@68: CRC32 instructions. Runtime detection for the instruction is jpayne@68: used on GNU/Linux, FreeBSD, Windows, and macOS. If the jpayne@68: compiler flags indicate unconditional CRC32 instruction jpayne@68: support (+crc) then the generic version is not built. jpayne@68: jpayne@68: - Added definitions of mask values like jpayne@68: LZMA_INDEX_CHECK_MASK_CRC32 to . jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Multithreaded mode is now the default. This improves jpayne@68: compression speed and creates .xz files that can be jpayne@68: decompressed in multithreaded mode. The downsides are jpayne@68: increased memory usage and slightly worse compression ratio. jpayne@68: jpayne@68: - Added a new command line option --filters to set the filter jpayne@68: chain using the liblzma filter string syntax. jpayne@68: jpayne@68: - Added new command line options --filters1 ... --filters9 to jpayne@68: set additional filter chains using the liblzma filter string jpayne@68: syntax. The --block-list option now allows specifying filter jpayne@68: chains that were set using these new options. jpayne@68: jpayne@68: - Ported the command line tools to Windows MSVC. jpayne@68: Visual Studio 2015 or later is required. jpayne@68: jpayne@68: * Added lz4 support to xzdiff/xzcmp and xzgrep. jpayne@68: jpayne@68: jpayne@68: 5.5.2beta (2024-02-14) jpayne@68: jpayne@68: * Licensing change: The core components are now under the jpayne@68: BSD Zero Clause License (0BSD). In XZ Utils 5.4.6 and older jpayne@68: and 5.5.1alpha these components are in the public domain and jpayne@68: obviously remain so; the change affects the new releases only. jpayne@68: jpayne@68: 0BSD is an extremely permissive license which doesn't require jpayne@68: retaining or reproducing copyright or license notices when jpayne@68: distributing the code, thus in practice there is extremely jpayne@68: little difference to public domain. jpayne@68: jpayne@68: * liblzma jpayne@68: jpayne@68: - Significant speed optimizations to the LZMA decoder were jpayne@68: made. There are now three variants that can be chosen at jpayne@68: build time: jpayne@68: jpayne@68: * Basic C version: This is a few percent faster than jpayne@68: 5.4.x due to some new optimizations. jpayne@68: jpayne@68: * Branchless C: This is currently the default on platforms jpayne@68: for which there is no assembly code. This should be a few jpayne@68: percent faster than the basic C version. jpayne@68: jpayne@68: * x86-64 inline assembly. This works with GCC and Clang. jpayne@68: jpayne@68: The default choice can currently be overridden by setting jpayne@68: LZMA_RANGE_DECODER_CONFIG in CPPFLAGS: 0 means the basic jpayne@68: version and 3 means that branchless C version. jpayne@68: jpayne@68: - Optimized the CRC32 calculation on ARM64 platforms using the jpayne@68: CRC32 instructions. The instructions are optional in ARMv8.0 jpayne@68: and are required in ARMv8.1 and later. Runtime detection for jpayne@68: the instruction is used on GNU/Linux, FreeBSD, Windows, and jpayne@68: macOS. If the compiler flags indicate unconditional CRC32 jpayne@68: instruction support (+crc) then the generic version is not jpayne@68: built. jpayne@68: jpayne@68: * Added lz4 support to xzdiff/xzcmp and xzgrep. jpayne@68: jpayne@68: * Man pages of xzdiff/xzcmp, xzgrep, and xzmore were rewritten jpayne@68: to simplify licensing of the man page translations. jpayne@68: jpayne@68: * Translations: jpayne@68: jpayne@68: - Updated Chinese (simplified), German, Korean, Polish, jpayne@68: Romanian, Spanish, Swedish, and Ukrainian translations. jpayne@68: jpayne@68: - Updated German, Korean, Romanian, and Ukrainian man page jpayne@68: translations. jpayne@68: jpayne@68: * Small improvements to the tests. jpayne@68: jpayne@68: * Added doc/examples/11_file_info.c. It was added to the Git jpayne@68: repository in 2017 but forgotten to be added into distribution jpayne@68: tarballs. jpayne@68: jpayne@68: * Removed doc/examples_old. These were from 2012. jpayne@68: jpayne@68: * Removed the macos/build.sh script. It had not been updated jpayne@68: since 2013. jpayne@68: jpayne@68: jpayne@68: 5.5.1alpha (2024-01-26) jpayne@68: jpayne@68: * Added a new filter for RISC-V binaries. The filter can be used jpayne@68: for 32-bit and 64-bit binaries with either little or big jpayne@68: endianness. In liblzma, the Filter ID is LZMA_FILTER_RISCV (0x0B) jpayne@68: and the xz option is --riscv. liblzma filter string syntax jpayne@68: recognizes this filter as "riscv". jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Added lzma_mt_block_size() to recommend a Block size for jpayne@68: multithreaded encoding jpayne@68: jpayne@68: - Added CLMUL-based CRC32 on x86-64 and E2K with runtime jpayne@68: processor detection. Similar to CRC64, on 32-bit x86 it jpayne@68: isn't available unless --disable-assembler is used. jpayne@68: jpayne@68: - Implemented GNU indirect function (IFUNC) as a runtime jpayne@68: function dispatching method for CRC32 and CRC64 fast jpayne@68: implementations on x86. Only GNU/Linux (glibc) and FreeBSD jpayne@68: builds will use IFUNC, unless --enable-ifunc is specified to jpayne@68: configure. jpayne@68: jpayne@68: - Added definitions of mask values like jpayne@68: LZMA_INDEX_CHECK_MASK_CRC32 to . jpayne@68: jpayne@68: - The XZ logo is now included in the Doxygen generated jpayne@68: documentation. It is licensed under Creative Commons jpayne@68: Attribution-ShareAlike 4.0. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Multithreaded mode is now the default. This improves jpayne@68: compression speed and creates .xz files that can be jpayne@68: decompressed multithreaded at the cost of increased memory jpayne@68: usage and slightly worse compression ratio. jpayne@68: jpayne@68: - Added new command line option --filters to set the filter jpayne@68: chain using liblzma filter string syntax. jpayne@68: jpayne@68: - Added new command line options --filters1 ... --filters9 to jpayne@68: set additional filter chains using liblzma filter string jpayne@68: syntax. The --block-list option now allows specifying filter jpayne@68: chains that were set using these new options. jpayne@68: jpayne@68: - Added support for Linux Landlock as a sandboxing method. jpayne@68: jpayne@68: - xzdec now supports pledge(2), Capsicum, and Linux Landlock as jpayne@68: sandboxing methods. jpayne@68: jpayne@68: - Progress indicator time stats remain accurate after pausing jpayne@68: xz with SIGTSTP. jpayne@68: jpayne@68: - Ported xz and xzdec to Windows MSVC. Visual Studio 2015 or jpayne@68: later is required. jpayne@68: jpayne@68: * CMake Build: jpayne@68: jpayne@68: - Supports pledge(2), Capsicum, and Linux Landlock sandboxing jpayne@68: methods. jpayne@68: jpayne@68: - Replacement functions for getopt_long() are used on platforms jpayne@68: that do not have it. jpayne@68: jpayne@68: * Enabled unaligned access by default on PowerPC64LE and on RISC-V jpayne@68: targets that define __riscv_misaligned_fast. jpayne@68: jpayne@68: * Tests: jpayne@68: jpayne@68: - Added two new fuzz targets to OSS-Fuzz. jpayne@68: jpayne@68: - Implemented Continuous Integration (CI) testing using jpayne@68: GitHub Actions. jpayne@68: jpayne@68: * Changed quoting style from `...' to '...' in all messages, jpayne@68: scripts, and documentation. jpayne@68: jpayne@68: * Added basic Codespell support to help catch typo errors. jpayne@68: jpayne@68: jpayne@68: 5.4.7 (2024-05-29) jpayne@68: jpayne@68: * Not changed: Memory sanitizer (MSAN) has a false positive jpayne@68: in the CRC CLMUL code which also makes OSS Fuzz unhappy. jpayne@68: Valgrind is smarter and doesn't complain. jpayne@68: jpayne@68: A revision to the CLMUL code is coming anyway and this issue jpayne@68: will be cleaned up as part of it. It won't be backported to jpayne@68: 5.6.x or 5.4.x because the old code isn't wrong. There is jpayne@68: no reason to risk introducing regressions in old branches jpayne@68: just to silence a false positive. jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - lzma_index_decoder() and lzma_index_buffer_decode(): Fix jpayne@68: a missing output pointer initialization (*i = NULL) if the jpayne@68: functions are called with invalid arguments. The API docs jpayne@68: say that such an initialization is always done. In practice jpayne@68: this matters very little because the problem can only occur jpayne@68: if the calling application has a bug and these functions jpayne@68: return LZMA_PROG_ERROR. jpayne@68: jpayne@68: - lzma_str_to_filters(): Fix a missing output pointer jpayne@68: initialization (*error_pos = 0). This is very similar jpayne@68: to the fix above. jpayne@68: jpayne@68: - Fix C standard conformance with function pointer types. jpayne@68: This newly showed up with Clang 17 with -fsanitize=undefined. jpayne@68: There are no bug reports about this. jpayne@68: jpayne@68: - Fix building with NVIDIA HPC SDK. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Fix a C standard conformance issue in --block-list parsing jpayne@68: (arithmetic on a null pointer). jpayne@68: jpayne@68: - Fix a warning from GNU groff when processing the man page: jpayne@68: "warning: cannot select font 'CW'" jpayne@68: jpayne@68: - Fix outdated threading related information on the man page. jpayne@68: jpayne@68: * xzless: jpayne@68: jpayne@68: - With "less" version 451 and later, use "||-" instead of "|-" jpayne@68: in the environment variable LESSOPEN. This way compressed jpayne@68: files that contain no uncompressed data are shown correctly jpayne@68: as empty. jpayne@68: jpayne@68: - With "less" version 632 and later, use --show-preproc-errors jpayne@68: to make "less" show a warning on decompression errors. jpayne@68: jpayne@68: * Autotools-based build system (configure): jpayne@68: jpayne@68: - Symbol versioning variant can now be overridden with jpayne@68: --enable-symbol-versions. Documentation in INSTALL was jpayne@68: updated to match. jpayne@68: jpayne@68: CMake: jpayne@68: jpayne@68: - Linux on MicroBlaze is handled specially now. This matches jpayne@68: the changes made to the Autotools-based build in XZ Utils jpayne@68: 5.4.2 and 5.2.11. jpayne@68: jpayne@68: - Disable symbol versioning on non-glibc Linux to match what jpayne@68: the Autotools build does. For example, symbol versioning jpayne@68: isn't enabled with musl. jpayne@68: jpayne@68: - Symbol versioning variant can now be overridden by setting jpayne@68: SYMBOL_VERSIONING to "OFF", "generic", or "linux". jpayne@68: jpayne@68: * Documentation: jpayne@68: jpayne@68: - Clarify the description of --disable-assembler in INSTALL. jpayne@68: The option only affects 32-bit x86 assembly usage. jpayne@68: jpayne@68: - Add doc/examples/11_file_info.c. It was added to the jpayne@68: Git repository in 2017 but forgotten to be added into jpayne@68: distribution tarballs. jpayne@68: jpayne@68: - Don't install the TODO file as part of the documentation. jpayne@68: The file is out of date. jpayne@68: jpayne@68: - Update home page URLs back to their old locations on jpayne@68: tukaani.org. jpayne@68: jpayne@68: - Update maintainer info. jpayne@68: jpayne@68: jpayne@68: 5.4.6 (2024-01-26) jpayne@68: jpayne@68: * Fixed a bug involving internal function pointers in liblzma not jpayne@68: being initialized to NULL. The bug can only be triggered if jpayne@68: lzma_filters_update() is called on a LZMA1 encoder, so it does jpayne@68: not affect xz or any application known to us that uses liblzma. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Fixed a regression introduced in 5.4.2 that caused encoding jpayne@68: in the raw format to unnecessarily fail if --suffix was not jpayne@68: used. For instance, the following command no longer reports jpayne@68: that --suffix must be used: jpayne@68: jpayne@68: echo foo | xz --format=raw --lzma2 | wc -c jpayne@68: jpayne@68: - Fixed an issue on MinGW-w64 builds that prevented reading jpayne@68: from or writing to non-terminal character devices like NUL. jpayne@68: jpayne@68: * Added a new test. jpayne@68: jpayne@68: jpayne@68: 5.4.5 (2023-11-01) jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Use __attribute__((__no_sanitize_address__)) to avoid address jpayne@68: sanitization with CRC64 CLMUL. It uses 16-byte-aligned reads jpayne@68: which can extend past the bounds of the input buffer and jpayne@68: inherently trigger address sanitization errors. This isn't jpayne@68: a bug. jpayne@68: jpayne@68: - Fixed an assertion failure that could be triggered by a large jpayne@68: unpadded_size argument. It was verified that there was no jpayne@68: other bug than the assertion failure. jpayne@68: jpayne@68: - Fixed a bug that prevented building with Windows Vista jpayne@68: threading when __attribute__((__constructor__)) is not jpayne@68: supported. jpayne@68: jpayne@68: * xz now properly handles special files such as "con" or "nul" on jpayne@68: Windows. Before this fix, the following wrote "foo" to the jpayne@68: console and deleted the input file "con_xz": jpayne@68: jpayne@68: echo foo | xz > con_xz jpayne@68: xz --suffix=_xz --decompress con_xz jpayne@68: jpayne@68: * Build systems: jpayne@68: jpayne@68: - Allow builds with Windows win95 threading and small mode when jpayne@68: __attribute__((__constructor__)) is supported. jpayne@68: jpayne@68: - Added a new line to liblzma.pc for MSYS2 (Windows): jpayne@68: jpayne@68: Cflags.private: -DLZMA_API_STATIC jpayne@68: jpayne@68: When compiling code that will link against static liblzma, jpayne@68: the LZMA_API_STATIC macro needs to be defined on Windows. jpayne@68: jpayne@68: - CMake specific changes: jpayne@68: jpayne@68: * Fixed a bug that allowed CLOCK_MONOTONIC to be used even jpayne@68: if the check for it failed. jpayne@68: jpayne@68: * Fixed a bug where configuring CMake multiple times jpayne@68: resulted in HAVE_CLOCK_GETTIME and HAVE_CLOCK_MONOTONIC jpayne@68: not being set. jpayne@68: jpayne@68: * Fixed the build with MinGW-w64-based Clang/LLVM 17. jpayne@68: llvm-windres now has more accurate GNU windres emulation jpayne@68: so the GNU windres workaround from 5.4.1 is needed with jpayne@68: llvm-windres version 17 too. jpayne@68: jpayne@68: * The import library on Windows is now properly named jpayne@68: "liblzma.dll.a" instead of "libliblzma.dll.a" jpayne@68: jpayne@68: * Fixed a bug causing the Ninja Generator to fail on jpayne@68: UNIX-like systems. This bug was introduced in 5.4.0. jpayne@68: jpayne@68: * Added a new option to disable CLMUL CRC64. jpayne@68: jpayne@68: * A module-definition (.def) file is now created when jpayne@68: building liblzma.dll with MinGW-w64. jpayne@68: jpayne@68: * The pkg-config liblzma.pc file is now installed on all jpayne@68: builds except when using MSVC on Windows. jpayne@68: jpayne@68: * Added large file support by default for platforms that jpayne@68: need it to handle files larger than 2 GiB. This includes jpayne@68: MinGW-w64, even 64-bit builds. jpayne@68: jpayne@68: * Small fixes and improvements to the tests. jpayne@68: jpayne@68: * Updated translations: Chinese (simplified) and Esperanto. jpayne@68: jpayne@68: jpayne@68: 5.4.4 (2023-08-02) jpayne@68: jpayne@68: * liblzma and xzdec can now build against WASI SDK when threading jpayne@68: support is disabled. xz and tests don't build yet. jpayne@68: jpayne@68: * CMake: jpayne@68: jpayne@68: - Fixed a bug preventing other projects from including liblzma jpayne@68: multiple times using find_package(). jpayne@68: jpayne@68: - Don't create broken symlinks in Cygwin and MSYS2 unless jpayne@68: supported by the environment. This prevented building for the jpayne@68: default MSYS2 environment. The problem was introduced in jpayne@68: xz 5.4.0. jpayne@68: jpayne@68: * Documentation: jpayne@68: jpayne@68: - Small improvements to man pages. jpayne@68: jpayne@68: - Small improvements and typo fixes for liblzma API jpayne@68: documentation. jpayne@68: jpayne@68: * Tests: jpayne@68: jpayne@68: - Added a new section to INSTALL to describe basic test usage jpayne@68: and address recent questions about building the tests when jpayne@68: cross compiling. jpayne@68: jpayne@68: - Small fixes and improvements to the tests. jpayne@68: jpayne@68: * Translations: jpayne@68: jpayne@68: - Fixed a mistake that caused one of the error messages to not jpayne@68: be translated. This only affected versions 5.4.2 and 5.4.3. jpayne@68: jpayne@68: - Updated the Chinese (simplified), Croatian, Esperanto, German, jpayne@68: Korean, Polish, Romanian, Spanish, Swedish, Ukrainian, and jpayne@68: Vietnamese translations. jpayne@68: jpayne@68: - Updated the German, Korean, Romanian, and Ukrainian man page jpayne@68: translations. jpayne@68: jpayne@68: jpayne@68: 5.4.3 (2023-05-04) jpayne@68: jpayne@68: * All fixes from 5.2.12 jpayne@68: jpayne@68: * Features in the CMake build can now be disabled as CMake cache jpayne@68: variables, similar to the Autotools build. jpayne@68: jpayne@68: * Minor update to the Croatian translation. jpayne@68: jpayne@68: jpayne@68: 5.4.2 (2023-03-18) jpayne@68: jpayne@68: * All fixes from 5.2.11 that were not included in 5.4.1. jpayne@68: jpayne@68: * If xz is built with support for the Capsicum sandbox but running jpayne@68: in an environment that doesn't support Capsicum, xz now runs jpayne@68: normally without sandboxing instead of exiting with an error. jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Documentation was updated to improve the style, consistency, jpayne@68: and completeness of the liblzma API headers. jpayne@68: jpayne@68: - The Doxygen-generated HTML documentation for the liblzma API jpayne@68: header files is now included in the source release and is jpayne@68: installed as part of "make install". All JavaScript is jpayne@68: removed to simplify license compliance and to reduce the jpayne@68: install size. jpayne@68: jpayne@68: - Fixed a minor bug in lzma_str_from_filters() that produced jpayne@68: too many filters in the output string instead of reporting jpayne@68: an error if the input array had more than four filters. This jpayne@68: bug did not affect xz. jpayne@68: jpayne@68: * Build systems: jpayne@68: jpayne@68: - autogen.sh now invokes the doxygen tool via the new wrapper jpayne@68: script doxygen/update-doxygen, unless the command line option jpayne@68: --no-doxygen is used. jpayne@68: jpayne@68: - Added microlzma_encoder.c and microlzma_decoder.c to the jpayne@68: VS project files for Windows and to the CMake build. These jpayne@68: should have been included in 5.3.2alpha. jpayne@68: jpayne@68: * Tests: jpayne@68: jpayne@68: - Added a test to the CMake build that was forgotten in the jpayne@68: previous release. jpayne@68: jpayne@68: - Added and refactored a few tests. jpayne@68: jpayne@68: * Translations: jpayne@68: jpayne@68: - Updated the Brazilian Portuguese translation. jpayne@68: jpayne@68: - Added Brazilian Portuguese man page translation. jpayne@68: jpayne@68: jpayne@68: 5.4.1 (2023-01-11) jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Fixed the return value of lzma_microlzma_encoder() if the jpayne@68: LZMA options lc/lp/pb are invalid. Invalid lc/lp/pb options jpayne@68: made the function return LZMA_STREAM_END without encoding jpayne@68: anything instead of returning LZMA_OPTIONS_ERROR. jpayne@68: jpayne@68: - Windows / Visual Studio: Workaround a possible compiler bug jpayne@68: when targeting 32-bit x86 and compiling the CLMUL version of jpayne@68: the CRC64 code. The CLMUL code isn't enabled by the Windows jpayne@68: project files but it is in the CMake-based builds. jpayne@68: jpayne@68: * Build systems: jpayne@68: jpayne@68: - Windows-specific CMake changes: jpayne@68: jpayne@68: * Don't try to enable CLMUL CRC64 code if _mm_set_epi64x() jpayne@68: isn't available. This fixes CMake-based build with Visual jpayne@68: Studio 2013. jpayne@68: jpayne@68: * Created a workaround for a build failure with windres jpayne@68: from GNU binutils. It is used only when the C compiler jpayne@68: is GCC (not Clang). The workaround is incompatible jpayne@68: with llvm-windres, resulting in "XZx20Utils" instead jpayne@68: of "XZ Utils" in the resource file, but without the jpayne@68: workaround llvm-windres works correctly. See the jpayne@68: comment in CMakeLists.txt for details. jpayne@68: jpayne@68: * Included the resource files in the xz and xzdec build jpayne@68: rules. Building the command line tools is still jpayne@68: experimental but possible with MinGW-w64. jpayne@68: jpayne@68: - Visual Studio: Added stream_decoder_mt.c to the project jpayne@68: files. Now the threaded decompressor lzma_stream_decoder_mt() jpayne@68: gets built. CMake-based build wasn't affected. jpayne@68: jpayne@68: - Updated windows/INSTALL-MSVC.txt to mention that CMake-based jpayne@68: build is now the preferred method with Visual Studio. The jpayne@68: project files will probably be removed after 5.4.x releases. jpayne@68: jpayne@68: - Changes to #defines in config.h: jpayne@68: jpayne@68: * HAVE_DECL_CLOCK_MONOTONIC was replaced by jpayne@68: HAVE_CLOCK_MONOTONIC. The old macro was always defined jpayne@68: in configure-generated config.h to either 0 or 1. The jpayne@68: new macro is defined (to 1) only if the declaration of jpayne@68: CLOCK_MONOTONIC is available. This matches the way most jpayne@68: other config.h macros work and makes things simpler with jpayne@68: other build systems. jpayne@68: jpayne@68: * HAVE_DECL_PROGRAM_INVOCATION_NAME was replaced by jpayne@68: HAVE_PROGRAM_INVOCATION_NAME for the same reason. jpayne@68: jpayne@68: * Tests: jpayne@68: jpayne@68: - Fixed test script compatibility with ancient /bin/sh jpayne@68: versions. Now the five test_compress_* tests should jpayne@68: no longer fail on Solaris 10. jpayne@68: jpayne@68: - Added and refactored a few tests. jpayne@68: jpayne@68: * Translations: jpayne@68: jpayne@68: - Updated the Catalan and Esperanto translations. jpayne@68: jpayne@68: - Added Korean and Ukrainian man page translations. jpayne@68: jpayne@68: jpayne@68: 5.4.0 (2022-12-13) jpayne@68: jpayne@68: This bumps the minor version of liblzma because new features were jpayne@68: added. The API and ABI are still backward compatible with liblzma jpayne@68: 5.2.x and 5.0.x. jpayne@68: jpayne@68: Since 5.3.5beta: jpayne@68: jpayne@68: * All fixes from 5.2.10. jpayne@68: jpayne@68: * The ARM64 filter is now stable. The xz option is now --arm64. jpayne@68: Decompression requires XZ Utils 5.4.0. In the future the ARM64 jpayne@68: filter will be supported by XZ for Java, XZ Embedded (including jpayne@68: the version in Linux), LZMA SDK, and 7-Zip. jpayne@68: jpayne@68: * Translations: jpayne@68: jpayne@68: - Updated Catalan, Croatian, German, Romanian, and Turkish jpayne@68: translations. jpayne@68: jpayne@68: - Updated German man page translations. jpayne@68: jpayne@68: - Added Romanian man page translations. jpayne@68: jpayne@68: Summary of new features added in the 5.3.x development releases: jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Added threaded .xz decompressor lzma_stream_decoder_mt(). jpayne@68: It can use multiple threads with .xz files that have multiple jpayne@68: Blocks with size information in Block Headers. The threaded jpayne@68: encoder in xz has always created such files. jpayne@68: jpayne@68: Single-threaded encoder cannot store the size information in jpayne@68: Block Headers even if one used LZMA_FULL_FLUSH to create jpayne@68: multiple Blocks, so this threaded decoder cannot use multiple jpayne@68: threads with such files. jpayne@68: jpayne@68: If there are multiple Streams (concatenated .xz files), one jpayne@68: Stream will be decompressed completely before starting the jpayne@68: next Stream. jpayne@68: jpayne@68: - A new decoder flag LZMA_FAIL_FAST was added. It makes the jpayne@68: threaded decompressor report errors soon instead of first jpayne@68: flushing all pending data before the error location. jpayne@68: jpayne@68: - New Filter IDs: jpayne@68: * LZMA_FILTER_ARM64 is for ARM64 binaries. jpayne@68: * LZMA_FILTER_LZMA1EXT is for raw LZMA1 streams that don't jpayne@68: necessarily use the end marker. jpayne@68: jpayne@68: - Added lzma_str_to_filters(), lzma_str_from_filters(), and jpayne@68: lzma_str_list_filters() to convert a preset or a filter chain jpayne@68: string to a lzma_filter[] and vice versa. These should make jpayne@68: it easier to write applications that allow users to specify jpayne@68: custom compression options. jpayne@68: jpayne@68: - Added lzma_filters_free() which can be convenient for freeing jpayne@68: the filter options in a filter chain (an array of lzma_filter jpayne@68: structures). jpayne@68: jpayne@68: - lzma_file_info_decoder() to makes it a little easier to get jpayne@68: the Index field from .xz files. This helps in getting the jpayne@68: uncompressed file size but an easy-to-use random access jpayne@68: API is still missing which has existed in XZ for Java for jpayne@68: a long time. jpayne@68: jpayne@68: - Added lzma_microlzma_encoder() and lzma_microlzma_decoder(). jpayne@68: It is used by erofs-utils and may be used by others too. jpayne@68: jpayne@68: The MicroLZMA format is a raw LZMA stream (without end marker) jpayne@68: whose first byte (always 0x00) has been replaced with jpayne@68: bitwise-negation of the LZMA properties (lc/lp/pb). It was jpayne@68: created for use in EROFS but may be used in other contexts jpayne@68: as well where it is important to avoid wasting bytes for jpayne@68: stream headers or footers. The format is also supported by jpayne@68: XZ Embedded (the XZ Embedded version in Linux got MicroLZMA jpayne@68: support in Linux 5.16). jpayne@68: jpayne@68: The MicroLZMA encoder API in liblzma can compress into a jpayne@68: fixed-sized output buffer so that as much data is compressed jpayne@68: as can be fit into the buffer while still creating a valid jpayne@68: MicroLZMA stream. This is needed for EROFS. jpayne@68: jpayne@68: - Added lzma_lzip_decoder() to decompress the .lz (lzip) file jpayne@68: format version 0 and the original unextended version 1 files. jpayne@68: Also lzma_auto_decoder() supports .lz files. jpayne@68: jpayne@68: - lzma_filters_update() can now be used with the multi-threaded jpayne@68: encoder (lzma_stream_encoder_mt()) to change the filter chain jpayne@68: after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH. jpayne@68: jpayne@68: - In lzma_options_lzma, allow nice_len = 2 and 3 with the match jpayne@68: finders that require at least 3 or 4. Now it is internally jpayne@68: rounded up if needed. jpayne@68: jpayne@68: - CLMUL-based CRC64 on x86-64 and E2K with runtime processor jpayne@68: detection. On 32-bit x86 it currently isn't available unless jpayne@68: --disable-assembler is used which can make the non-CLMUL jpayne@68: CRC64 slower; this might be fixed in the future. jpayne@68: jpayne@68: - Building with --disable-threads --enable-small jpayne@68: is now thread-safe if the compiler supports jpayne@68: __attribute__((__constructor__)). jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Using -T0 (--threads=0) will now use multi-threaded encoder jpayne@68: even on a single-core system. This is to ensure that output jpayne@68: from the same xz binary is identical on both single-core and jpayne@68: multi-core systems. jpayne@68: jpayne@68: - --threads=+1 or -T+1 is now a way to put xz into jpayne@68: multi-threaded mode while using only one worker thread. jpayne@68: The + is ignored if the number is not 1. jpayne@68: jpayne@68: - A default soft memory usage limit is now used for compression jpayne@68: when -T0 is used and no explicit limit has been specified. jpayne@68: This soft limit is used to restrict the number of threads jpayne@68: but if the limit is exceeded with even one thread then xz jpayne@68: will continue with one thread using the multi-threaded jpayne@68: encoder and this limit is ignored. If the number of threads jpayne@68: is specified manually then no default limit will be used; jpayne@68: this affects only -T0. jpayne@68: jpayne@68: This change helps on systems that have very many cores and jpayne@68: using all of them for xz makes no sense. Previously xz -T0 jpayne@68: could run out of memory on such systems because it attempted jpayne@68: to reserve memory for too many threads. jpayne@68: jpayne@68: This also helps with 32-bit builds which don't have a large jpayne@68: amount of address space that would be required for many jpayne@68: threads. The default soft limit for -T0 is at most 1400 MiB jpayne@68: on all 32-bit platforms. jpayne@68: jpayne@68: - Previously a low value in --memlimit-compress wouldn't cause jpayne@68: xz to switch from multi-threaded mode to single-threaded mode jpayne@68: if the limit cannot otherwise be met; xz failed instead. Now jpayne@68: xz can switch to single-threaded mode and then, if needed, jpayne@68: scale down the LZMA2 dictionary size too just like it already jpayne@68: did when it was started in single-threaded mode. jpayne@68: jpayne@68: - The option --no-adjust no longer prevents xz from scaling down jpayne@68: the number of threads as that doesn't affect the compressed jpayne@68: output (only performance). Now --no-adjust only prevents jpayne@68: adjustments that affect compressed output, that is, with jpayne@68: --no-adjust xz won't switch from multi-threaded mode to jpayne@68: single-threaded mode and won't scale down the LZMA2 jpayne@68: dictionary size. jpayne@68: jpayne@68: - Added a new option --memlimit-mt-decompress=LIMIT. This is jpayne@68: used to limit the number of decompressor threads (possibly jpayne@68: falling back to single-threaded mode) but it will never make jpayne@68: xz refuse to decompress a file. This has a system-specific jpayne@68: default value because without any limit xz could end up jpayne@68: allocating memory for the whole compressed input file, the jpayne@68: whole uncompressed output file, multiple thread-specific jpayne@68: decompressor instances and so on. Basically xz could jpayne@68: attempt to use an insane amount of memory even with fairly jpayne@68: common files. The system-specific default value is currently jpayne@68: the same as the one used for compression with -T0. jpayne@68: jpayne@68: The new option works together with the existing option jpayne@68: --memlimit-decompress=LIMIT. The old option sets a hard limit jpayne@68: that must not be exceeded (xz will refuse to decompress) jpayne@68: while the new option only restricts the number of threads. jpayne@68: If the limit set with --memlimit-mt-decompress is greater jpayne@68: than the limit set with --memlimit-compress, then the latter jpayne@68: value is used also for --memlimit-mt-decompress. jpayne@68: jpayne@68: - Added new information to the output of xz --info-memory and jpayne@68: new fields to the output of xz --robot --info-memory. jpayne@68: jpayne@68: - In --lzma2=nice=NUMBER allow 2 and 3 with all match finders jpayne@68: now that liblzma handles it. jpayne@68: jpayne@68: - Don't mention endianness for ARM and ARM-Thumb filters in jpayne@68: --long-help. The filters only work for little endian jpayne@68: instruction encoding but modern ARM processors using jpayne@68: big endian data access still use little endian jpayne@68: instruction encoding. So the help text was misleading. jpayne@68: In contrast, the PowerPC filter is only for big endian jpayne@68: 32/64-bit PowerPC code. Little endian PowerPC would need jpayne@68: a separate filter. jpayne@68: jpayne@68: - Added decompression support for the .lz (lzip) file format jpayne@68: version 0 and the original unextended version 1. It is jpayne@68: autodetected by default. See also the option --format on jpayne@68: the xz man page. jpayne@68: jpayne@68: - Sandboxing enabled by default: jpayne@68: * Capsicum (FreeBSD) jpayne@68: * pledge(2) (OpenBSD) jpayne@68: jpayne@68: * Scripts now support the .lz format using xz. jpayne@68: jpayne@68: * A few new tests were added. jpayne@68: jpayne@68: * The liblzma-specific tests are now supported in CMake-based jpayne@68: builds too ("make test"). jpayne@68: jpayne@68: jpayne@68: 5.3.5beta (2022-12-01) jpayne@68: jpayne@68: * All fixes from 5.2.9. jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Added new LZMA_FILTER_LZMA1EXT for raw encoder and decoder to jpayne@68: handle raw LZMA1 streams that don't have end of payload marker jpayne@68: (EOPM) alias end of stream (EOS) marker. It can be used in jpayne@68: filter chains, for example, with the x86 BCJ filter. jpayne@68: jpayne@68: - Added lzma_str_to_filters(), lzma_str_from_filters(), and jpayne@68: lzma_str_list_filters() to make it easier for applications jpayne@68: to get custom compression options from a user and convert jpayne@68: it to an array of lzma_filter structures. jpayne@68: jpayne@68: - Added lzma_filters_free(). jpayne@68: jpayne@68: - lzma_filters_update() can now be used with the multi-threaded jpayne@68: encoder (lzma_stream_encoder_mt()) to change the filter chain jpayne@68: after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH. jpayne@68: jpayne@68: - In lzma_options_lzma, allow nice_len = 2 and 3 with the match jpayne@68: finders that require at least 3 or 4. Now it is internally jpayne@68: rounded up if needed. jpayne@68: jpayne@68: - ARM64 filter was modified. It is still experimental. jpayne@68: jpayne@68: - Fixed LTO build with Clang if -fgnuc-version=10 or similar jpayne@68: was used to make Clang look like GCC >= 10. Now it uses jpayne@68: __has_attribute(__symver__) which should be reliable. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - --threads=+1 or -T+1 is now a way to put xz into multi-threaded jpayne@68: mode while using only one worker thread. jpayne@68: jpayne@68: - In --lzma2=nice=NUMBER allow 2 and 3 with all match finders jpayne@68: now that liblzma handles it. jpayne@68: jpayne@68: * Updated translations: Chinese (simplified), Korean, and Turkish. jpayne@68: jpayne@68: jpayne@68: 5.3.4alpha (2022-11-15) jpayne@68: jpayne@68: * All fixes from 5.2.7 and 5.2.8. jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Minor improvements to the threaded decoder. jpayne@68: jpayne@68: - Added CRC64 implementation that uses SSSE3, SSE4.1, and CLMUL jpayne@68: instructions on 32/64-bit x86 and E2K. On 32-bit x86 it's jpayne@68: not enabled unless --disable-assembler is used but then jpayne@68: the non-CLMUL code might be slower. Processor support is jpayne@68: detected at runtime so this is built by default on x86-64 jpayne@68: and E2K. On these platforms, if compiler flags indicate jpayne@68: unconditional CLMUL support (-msse4.1 -mpclmul) then the jpayne@68: generic version is not built, making liblzma 8-9 KiB smaller jpayne@68: compared to having both versions included. jpayne@68: jpayne@68: With extremely compressible files this can make decompression jpayne@68: up to twice as fast but with typical files 5 % improvement jpayne@68: is a more realistic expectation. jpayne@68: jpayne@68: The CLMUL version is slower than the generic version with jpayne@68: tiny inputs (especially at 1-8 bytes per call, but up to jpayne@68: 16 bytes). In normal use in xz this doesn't matter at all. jpayne@68: jpayne@68: - Added an experimental ARM64 filter. This is *not* the final jpayne@68: version! Files created with this experimental version won't jpayne@68: be supported in the future versions! The filter design is jpayne@68: a compromise where improving one use case makes some other jpayne@68: cases worse. jpayne@68: jpayne@68: - Added decompression support for the .lz (lzip) file format jpayne@68: version 0 and the original unextended version 1. See the jpayne@68: API docs of lzma_lzip_decoder() for details. Also jpayne@68: lzma_auto_decoder() supports .lz files. jpayne@68: jpayne@68: - Building with --disable-threads --enable-small jpayne@68: is now thread-safe if the compiler supports jpayne@68: __attribute__((__constructor__)) jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Added support for OpenBSD's pledge(2) as a sandboxing method. jpayne@68: jpayne@68: - Don't mention endianness for ARM and ARM-Thumb filters in jpayne@68: --long-help. The filters only work for little endian jpayne@68: instruction encoding but modern ARM processors using jpayne@68: big endian data access still use little endian jpayne@68: instruction encoding. So the help text was misleading. jpayne@68: In contrast, the PowerPC filter is only for big endian jpayne@68: 32/64-bit PowerPC code. Little endian PowerPC would need jpayne@68: a separate filter. jpayne@68: jpayne@68: - Added --experimental-arm64. This will be renamed once the jpayne@68: filter is finished. Files created with this experimental jpayne@68: filter will not be supported in the future! jpayne@68: jpayne@68: - Added new fields to the output of xz --robot --info-memory. jpayne@68: jpayne@68: - Added decompression support for the .lz (lzip) file format jpayne@68: version 0 and the original unextended version 1. It is jpayne@68: autodetected by default. See also the option --format on jpayne@68: the xz man page. jpayne@68: jpayne@68: * Scripts now support the .lz format using xz. jpayne@68: jpayne@68: * Build systems: jpayne@68: jpayne@68: - New #defines in config.h: HAVE_ENCODER_ARM64, jpayne@68: HAVE_DECODER_ARM64, HAVE_LZIP_DECODER, HAVE_CPUID_H, jpayne@68: HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR, HAVE_USABLE_CLMUL jpayne@68: jpayne@68: - New configure options: --disable-clmul-crc, jpayne@68: --disable-microlzma, --disable-lzip-decoder, and jpayne@68: 'pledge' is now an option in --enable-sandbox (but jpayne@68: it's autodetected by default anyway). jpayne@68: jpayne@68: - INSTALL was updated to document the new configure options. jpayne@68: jpayne@68: - PACKAGERS now lists also --disable-microlzma and jpayne@68: --disable-lzip-decoder as configure options that must jpayne@68: not be used in builds for non-embedded use. jpayne@68: jpayne@68: * Tests: jpayne@68: jpayne@68: - Fix some of the tests so that they skip instead of fail if jpayne@68: certain features have been disabled with configure options. jpayne@68: It's still not perfect. jpayne@68: jpayne@68: - Other improvements to tests. jpayne@68: jpayne@68: * Updated translations: Croatian, Finnish, Hungarian, Polish, jpayne@68: Romanian, Spanish, Swedish, and Ukrainian. jpayne@68: jpayne@68: jpayne@68: 5.3.3alpha (2022-08-22) jpayne@68: jpayne@68: * All fixes from 5.2.6. jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Fixed 32-bit build. jpayne@68: jpayne@68: - Added threaded .xz decompressor lzma_stream_decoder_mt(). jpayne@68: It can use multiple threads with .xz files that have multiple jpayne@68: Blocks with size information in Block Headers. The threaded jpayne@68: encoder in xz has always created such files. jpayne@68: jpayne@68: Single-threaded encoder cannot store the size information in jpayne@68: Block Headers even if one used LZMA_FULL_FLUSH to create jpayne@68: multiple Blocks, so this threaded decoder cannot use multiple jpayne@68: threads with such files. jpayne@68: jpayne@68: If there are multiple Streams (concatenated .xz files), one jpayne@68: Stream will be decompressed completely before starting the jpayne@68: next Stream. jpayne@68: jpayne@68: - A new decoder flag LZMA_FAIL_FAST was added. It makes the jpayne@68: threaded decompressor report errors soon instead of first jpayne@68: flushing all pending data before the error location. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Using -T0 (--threads=0) will now use multi-threaded encoder jpayne@68: even on a single-core system. This is to ensure that output jpayne@68: from the same xz binary is identical on both single-core and jpayne@68: multi-core systems. jpayne@68: jpayne@68: - A default soft memory usage limit is now used for compression jpayne@68: when -T0 is used and no explicit limit has been specified. jpayne@68: This soft limit is used to restrict the number of threads jpayne@68: but if the limit is exceeded with even one thread then xz jpayne@68: will continue with one thread using the multi-threaded jpayne@68: encoder and this limit is ignored. If the number of threads jpayne@68: is specified manually then no default limit will be used; jpayne@68: this affects only -T0. jpayne@68: jpayne@68: This change helps on systems that have very many cores and jpayne@68: using all of them for xz makes no sense. Previously xz -T0 jpayne@68: could run out of memory on such systems because it attempted jpayne@68: to reserve memory for too many threads. jpayne@68: jpayne@68: This also helps with 32-bit builds which don't have a large jpayne@68: amount of address space that would be required for many jpayne@68: threads. The default limit is 1400 MiB on all 32-bit jpayne@68: platforms with -T0. jpayne@68: jpayne@68: Now xz -T0 should just work. It might use too few threads jpayne@68: in some cases but at least it shouldn't easily run out of jpayne@68: memory. It's possible that this will be tweaked before 5.4.0. jpayne@68: jpayne@68: - Changes to --memlimit-compress and --no-adjust: jpayne@68: jpayne@68: In single-threaded mode, --memlimit-compress can make xz jpayne@68: scale down the LZMA2 dictionary size to meet the memory usage jpayne@68: limit. This obviously affects the compressed output. However, jpayne@68: if xz was in threaded mode, --memlimit-compress could make xz jpayne@68: reduce the number of threads but it wouldn't make xz switch jpayne@68: from multi-threaded mode to single-threaded mode or scale jpayne@68: down the LZMA2 dictionary size. This seemed illogical. jpayne@68: jpayne@68: Now --memlimit-compress can make xz switch to single-threaded jpayne@68: mode if one thread in multi-threaded mode uses too much jpayne@68: memory. If memory usage is still too high, then the LZMA2 jpayne@68: dictionary size can be scaled down too. jpayne@68: jpayne@68: The option --no-adjust was also changed so that it no longer jpayne@68: prevents xz from scaling down the number of threads as that jpayne@68: doesn't affect compressed output (only performance). After jpayne@68: this commit --no-adjust only prevents adjustments that affect jpayne@68: compressed output, that is, with --no-adjust xz won't switch jpayne@68: from multithreaded mode to single-threaded mode and won't jpayne@68: scale down the LZMA2 dictionary size. jpayne@68: jpayne@68: - Added a new option --memlimit-mt-decompress=LIMIT. This is jpayne@68: used to limit the number of decompressor threads (possibly jpayne@68: falling back to single-threaded mode) but it will never make jpayne@68: xz refuse to decompress a file. This has a system-specific jpayne@68: default value because without any limit xz could end up jpayne@68: allocating memory for the whole compressed input file, the jpayne@68: whole uncompressed output file, multiple thread-specific jpayne@68: decompressor instances and so on. Basically xz could jpayne@68: attempt to use an insane amount of memory even with fairly jpayne@68: common files. jpayne@68: jpayne@68: The new option works together with the existing option jpayne@68: --memlimit-decompress=LIMIT. The old option sets a hard limit jpayne@68: that must not be exceeded (xz will refuse to decompress) jpayne@68: while the new option only restricts the number of threads. jpayne@68: If the limit set with --memlimit-mt-decompress is greater jpayne@68: than the limit set with --memlimit-compress, then the latter jpayne@68: value is used also for --memlimit-mt-decompress. jpayne@68: jpayne@68: * Tests: jpayne@68: jpayne@68: - Added a few more tests. jpayne@68: jpayne@68: - Added tests/code_coverage.sh to create a code coverage report jpayne@68: of the tests. jpayne@68: jpayne@68: * Build systems: jpayne@68: jpayne@68: - Automake's parallel test harness is now used to make tests jpayne@68: finish faster. jpayne@68: jpayne@68: - Added the CMake files to the distribution tarball. These were jpayne@68: supposed to be in 5.2.5 already. jpayne@68: jpayne@68: - Added liblzma tests to the CMake build. jpayne@68: jpayne@68: - Windows: Fix building of liblzma.dll with the included jpayne@68: Visual Studio project files. jpayne@68: jpayne@68: jpayne@68: 5.3.2alpha (2021-10-28) jpayne@68: jpayne@68: This release was made on short notice so that recent erofs-utils can jpayne@68: be built with LZMA support without needing a snapshot from xz.git. jpayne@68: Thus many pending things were not included, not even updated jpayne@68: translations (which would need to be updated for the new --list jpayne@68: strings anyway). jpayne@68: jpayne@68: * All fixes from 5.2.5. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - When copying metadata from the source file to the destination jpayne@68: file, don't try to set the group (GID) if it is already set jpayne@68: correctly. This avoids a failure on OpenBSD (and possibly on jpayne@68: a few other OSes) where files may get created so that their jpayne@68: group doesn't belong to the user, and fchown(2) can fail even jpayne@68: if it needs to do nothing. jpayne@68: jpayne@68: - The --keep option now accepts symlinks, hardlinks, and jpayne@68: setuid, setgid, and sticky files. Previously this required jpayne@68: using --force. jpayne@68: jpayne@68: - Split the long strings used in --list and --info-memory modes jpayne@68: to make them much easier for translators. jpayne@68: jpayne@68: - If built with sandbox support and enabling the sandbox fails, jpayne@68: xz will now immediately exit with exit status of 1. Previously jpayne@68: it would only display a warning if -vv was used. jpayne@68: jpayne@68: - Cap --memlimit-compress to 2000 MiB on MIPS32 because on jpayne@68: MIPS32 userspace processes are limited to 2 GiB of address jpayne@68: space. jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Added lzma_microlzma_encoder() and lzma_microlzma_decoder(). jpayne@68: The API is in lzma/container.h. jpayne@68: jpayne@68: The MicroLZMA format is a raw LZMA stream (without end marker) jpayne@68: whose first byte (always 0x00) has been replaced with jpayne@68: bitwise-negation of the LZMA properties (lc/lp/pb). It was jpayne@68: created for use in EROFS but may be used in other contexts jpayne@68: as well where it is important to avoid wasting bytes for jpayne@68: stream headers or footers. The format is also supported by jpayne@68: XZ Embedded. jpayne@68: jpayne@68: The MicroLZMA encoder API in liblzma can compress into a jpayne@68: fixed-sized output buffer so that as much data is compressed jpayne@68: as can be fit into the buffer while still creating a valid jpayne@68: MicroLZMA stream. This is needed for EROFS. jpayne@68: jpayne@68: - Added fuzzing support. jpayne@68: jpayne@68: - Support Intel Control-flow Enforcement Technology (CET) in jpayne@68: 32-bit x86 assembly files. jpayne@68: jpayne@68: - Visual Studio: Use non-standard _MSVC_LANG to detect C++ jpayne@68: standard version in the lzma.h API header. It's used to jpayne@68: detect when "noexcept" can be used. jpayne@68: jpayne@68: * Scripts: jpayne@68: jpayne@68: - Fix exit status of xzdiff/xzcmp. Exit status could be 2 when jpayne@68: the correct value is 1. jpayne@68: jpayne@68: - Fix exit status of xzgrep. jpayne@68: jpayne@68: - Detect corrupt .bz2 files in xzgrep. jpayne@68: jpayne@68: - Add zstd support to xzgrep and xzdiff/xzcmp. jpayne@68: jpayne@68: - Fix less(1) version detection in xzless. It failed if the jpayne@68: version number from "less -V" contained a dot. jpayne@68: jpayne@68: * Fix typos and technical issues in man pages. jpayne@68: jpayne@68: * Build systems: jpayne@68: jpayne@68: - Windows: Fix building of resource files when config.h isn't jpayne@68: used. CMake + Visual Studio can now build liblzma.dll. jpayne@68: jpayne@68: - Various fixes to the CMake support. It might still need a few jpayne@68: more fixes even for liblzma-only builds. jpayne@68: jpayne@68: jpayne@68: 5.3.1alpha (2018-04-29) jpayne@68: jpayne@68: * All fixes from 5.2.4. jpayne@68: jpayne@68: * Add lzma_file_info_decoder() into liblzma and use it in xz to jpayne@68: implement the --list feature. jpayne@68: jpayne@68: * Capsicum sandbox support is enabled by default where available jpayne@68: (FreeBSD >= 10). jpayne@68: jpayne@68: jpayne@68: 5.2.13 (2024-05-29) jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - lzma_index_append(): Fix an assertion failure that could be jpayne@68: triggered by a large unpadded_size argument. It was verified jpayne@68: that there was no other bug than the assertion failure. jpayne@68: jpayne@68: - lzma_index_decoder() and lzma_index_buffer_decode(): Fix jpayne@68: a missing output pointer initialization (*i = NULL) if the jpayne@68: functions are called with invalid arguments. The API docs jpayne@68: say that such an initialization is always done. In practice jpayne@68: this matters very little because the problem can only occur jpayne@68: if the calling application has a bug and these functions jpayne@68: return LZMA_PROG_ERROR. jpayne@68: jpayne@68: - Fix C standard conformance with function pointer types. jpayne@68: This newly showed up with Clang 17 with -fsanitize=undefined. jpayne@68: There are no bug reports about this. jpayne@68: jpayne@68: - Fix building with NVIDIA HPC SDK. jpayne@68: jpayne@68: - Fix building with Windows Vista threads and --enable-small. jpayne@68: (CMake build doesn't support ENABLE_SMALL in XZ Utils 5.2.x.) jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Fix a C standard conformance issue in --block-list parsing jpayne@68: (arithmetic on a null pointer). jpayne@68: jpayne@68: - Fix a warning from GNU groff when processing the man page: jpayne@68: "warning: cannot select font 'CW'" jpayne@68: jpayne@68: - Windows: Handle special files such as "con" or "nul". Earlier jpayne@68: the following wrote "foo" to the console and deleted the input jpayne@68: file "con_xz": jpayne@68: jpayne@68: echo foo | xz > con_xz jpayne@68: xz --suffix=_xz --decompress con_xz jpayne@68: jpayne@68: - Windows: Fix an issue that prevented reading from or writing jpayne@68: to non-terminal character devices like NUL. jpayne@68: jpayne@68: * xzless: jpayne@68: jpayne@68: - With "less" version 451 and later, use "||-" instead of "|-" jpayne@68: in the environment variable LESSOPEN. This way compressed jpayne@68: files that contain no uncompressed data are shown correctly jpayne@68: as empty. jpayne@68: jpayne@68: - With "less" version 632 and later, use --show-preproc-errors jpayne@68: to make "less" show a warning on decompression errors. jpayne@68: jpayne@68: * Build systems: jpayne@68: jpayne@68: - Add a new line to liblzma.pc for MSYS2 (Windows): jpayne@68: jpayne@68: Cflags.private: -DLZMA_API_STATIC jpayne@68: jpayne@68: When compiling code that will link against static liblzma, jpayne@68: the LZMA_API_STATIC macro needs to be defined on Windows. jpayne@68: jpayne@68: - Autotools (configure): jpayne@68: jpayne@68: * Symbol versioning variant can now be overridden with jpayne@68: --enable-symbol-versions. Documentation in INSTALL was jpayne@68: updated to match. jpayne@68: jpayne@68: - CMake: jpayne@68: jpayne@68: * Fix a bug that prevented other projects from including jpayne@68: liblzma multiple times using find_package(). jpayne@68: jpayne@68: * Fix a bug where configuring CMake multiple times resulted jpayne@68: in HAVE_CLOCK_GETTIME and HAVE_CLOCK_MONOTONIC not being jpayne@68: defined. jpayne@68: jpayne@68: * Fix the build with MinGW-w64-based Clang/LLVM 17. jpayne@68: llvm-windres now has more accurate GNU windres emulation jpayne@68: so the GNU windres workaround from 5.4.1 is needed with jpayne@68: llvm-windres version 17 too. jpayne@68: jpayne@68: * The import library on Windows is now properly named jpayne@68: "liblzma.dll.a" instead of "libliblzma.dll.a" jpayne@68: jpayne@68: * Add large file support by default for platforms that jpayne@68: need it to handle files larger than 2 GiB. This includes jpayne@68: MinGW-w64, even 64-bit builds. jpayne@68: jpayne@68: * Linux on MicroBlaze is handled specially now. This jpayne@68: matches the changes made to the Autotools-based build jpayne@68: in XZ Utils 5.4.2 and 5.2.11. jpayne@68: jpayne@68: * Disable symbol versioning on non-glibc Linux to match jpayne@68: what the Autotools build does. For example, symbol jpayne@68: versioning isn't enabled with musl. jpayne@68: jpayne@68: * Symbol versioning variant can now be overridden by jpayne@68: setting SYMBOL_VERSIONING to "OFF", "generic", or jpayne@68: "linux". jpayne@68: jpayne@68: * Documentation: jpayne@68: jpayne@68: - Clarify the description of --disable-assembler in INSTALL. jpayne@68: The option only affects 32-bit x86 assembly usage. jpayne@68: jpayne@68: - Don't install the TODO file as part of the documentation. jpayne@68: The file is out of date. jpayne@68: jpayne@68: - Update home page URLs back to their old locations on jpayne@68: tukaani.org. jpayne@68: jpayne@68: - Update maintainer info. jpayne@68: jpayne@68: jpayne@68: 5.2.12 (2023-05-04) jpayne@68: jpayne@68: * Fixed a build system bug that prevented building liblzma as a jpayne@68: shared library when configured with --disable-threads. This bug jpayne@68: affected releases 5.2.6 to 5.2.11 and 5.4.0 to 5.4.2. jpayne@68: jpayne@68: * Include for Windows intrinsic functions where they are jpayne@68: needed. This fixed a bug that prevented building liblzma using jpayne@68: clang-cl on Windows. jpayne@68: jpayne@68: * Minor update to the Croatian translation. The small change jpayne@68: applies to a string in both 5.2 and 5.4 branches. jpayne@68: jpayne@68: jpayne@68: 5.2.11 (2023-03-18) jpayne@68: jpayne@68: * Removed all possible cases of null pointer + 0. It is undefined jpayne@68: behavior in C99 and C17. This was detected by a sanitizer and had jpayne@68: not caused any known issues. jpayne@68: jpayne@68: * Build systems: jpayne@68: jpayne@68: - Added a workaround for building with GCC on MicroBlaze Linux. jpayne@68: GCC 12 on MicroBlaze doesn't support the __symver__ attribute jpayne@68: even though __has_attribute(__symver__) returns true. The jpayne@68: build is now done without the extra RHEL/CentOS 7 symbols jpayne@68: that were added in XZ Utils 5.2.7. The workaround only jpayne@68: applies to the Autotools build (not CMake). jpayne@68: jpayne@68: - CMake: Ensure that the C compiler language is set to C99 or jpayne@68: a newer standard. jpayne@68: jpayne@68: - CMake changes from XZ Utils 5.4.1: jpayne@68: jpayne@68: * Added a workaround for a build failure with jpayne@68: windres from GNU binutils. jpayne@68: jpayne@68: * Included the Windows resource files in the xz jpayne@68: and xzdec build rules. jpayne@68: jpayne@68: jpayne@68: 5.2.10 (2022-12-13) jpayne@68: jpayne@68: * xz: Don't modify argv[] when parsing the --memlimit* and jpayne@68: --block-list command line options. This fixes confusing jpayne@68: arguments in process listing (like "ps auxf"). jpayne@68: jpayne@68: * GNU/Linux only: Use __has_attribute(__symver__) to detect if jpayne@68: that attribute is supported. This fixes build on Mandriva where jpayne@68: Clang is patched to define __GNUC__ to 11 by default (instead jpayne@68: of 4 as used by Clang upstream). jpayne@68: jpayne@68: jpayne@68: 5.2.9 (2022-11-30) jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Fixed an infinite loop in LZMA encoder initialization jpayne@68: if dict_size >= 2 GiB. (The encoder only supports up jpayne@68: to 1536 MiB.) jpayne@68: jpayne@68: - Fixed two cases of invalid free() that can happen if jpayne@68: a tiny allocation fails in encoder re-initialization jpayne@68: or in lzma_filters_update(). These bugs had some jpayne@68: similarities with the bug fixed in 5.2.7. jpayne@68: jpayne@68: - Fixed lzma_block_encoder() not allowing the use of jpayne@68: LZMA_SYNC_FLUSH with lzma_code() even though it was jpayne@68: documented to be supported. The sync-flush code in jpayne@68: the Block encoder was already used internally via jpayne@68: lzma_stream_encoder(), so this was just a missing flag jpayne@68: in the lzma_block_encoder() API function. jpayne@68: jpayne@68: - GNU/Linux only: Don't put symbol versions into static jpayne@68: liblzma as it breaks things in some cases (and even if jpayne@68: it didn't break anything, symbol versions in static jpayne@68: libraries are useless anyway). The downside of the fix jpayne@68: is that if the configure options --with-pic or --without-pic jpayne@68: are used then it's not possible to build both shared and jpayne@68: static liblzma at the same time on GNU/Linux anymore; jpayne@68: with those options --disable-static or --disable-shared jpayne@68: must be used too. jpayne@68: jpayne@68: * New email address for bug reports is which jpayne@68: forwards messages to Lasse Collin and Jia Tan. jpayne@68: jpayne@68: jpayne@68: 5.2.8 (2022-11-13) jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - If xz cannot remove an input file when it should, this jpayne@68: is now treated as a warning (exit status 2) instead of jpayne@68: an error (exit status 1). This matches GNU gzip and it jpayne@68: is more logical as at that point the output file has jpayne@68: already been successfully closed. jpayne@68: jpayne@68: - Fix handling of .xz files with an unsupported check type. jpayne@68: Previously such printed a warning message but then xz jpayne@68: behaved as if an error had occurred (didn't decompress, jpayne@68: exit status 1). Now a warning is printed, decompression jpayne@68: is done anyway, and exit status is 2. This used to work jpayne@68: slightly before 5.0.0. In practice this bug matters only jpayne@68: if xz has been built with some check types disabled. As jpayne@68: instructed in PACKAGERS, such builds should be done in jpayne@68: special situations only. jpayne@68: jpayne@68: - Fix "xz -dc --single-stream tests/files/good-0-empty.xz" jpayne@68: which failed with "Internal error (bug)". That is, jpayne@68: --single-stream was broken if the first .xz stream in jpayne@68: the input file didn't contain any uncompressed data. jpayne@68: jpayne@68: - Fix displaying file sizes in the progress indicator when jpayne@68: working in passthru mode and there are multiple input files. jpayne@68: Just like "gzip -cdf", "xz -cdf" works like "cat" when the jpayne@68: input file isn't a supported compressed file format. In jpayne@68: this case the file size counters weren't reset between jpayne@68: files so with multiple input files the progress indicator jpayne@68: displayed an incorrect (too large) value. jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - API docs in lzma/container.h: jpayne@68: * Update the list of decoder flags in the decoder jpayne@68: function docs. jpayne@68: * Explain LZMA_CONCATENATED behavior with .lzma files jpayne@68: in lzma_auto_decoder() docs. jpayne@68: jpayne@68: - OpenBSD: Use HW_NCPUONLINE to detect the number of jpayne@68: available hardware threads in lzma_physmem(). jpayne@68: jpayne@68: - Fix use of wrong macro to detect x86 SSE2 support. jpayne@68: __SSE2_MATH__ was used with GCC/Clang but the correct jpayne@68: one is __SSE2__. The first one means that SSE2 is used jpayne@68: for floating point math which is irrelevant here. jpayne@68: The affected SSE2 code isn't used on x86-64 so this affects jpayne@68: only 32-bit x86 builds that use -msse2 without -mfpmath=sse jpayne@68: (there is no runtime detection for SSE2). It improves LZMA jpayne@68: compression speed (not decompression). jpayne@68: jpayne@68: - Fix the build with Intel C compiler 2021 (ICC, not ICX) jpayne@68: on Linux. It defines __GNUC__ to 10 but doesn't support jpayne@68: the __symver__ attribute introduced in GCC 10. jpayne@68: jpayne@68: * Scripts: Ignore warnings from xz by using --quiet --no-warn. jpayne@68: This is needed if the input .xz files use an unsupported jpayne@68: check type. jpayne@68: jpayne@68: * Translations: jpayne@68: jpayne@68: - Updated Croatian and Turkish translations. jpayne@68: jpayne@68: - One new translations wasn't included because it needed jpayne@68: technical fixes. It will be in upcoming 5.4.0. No new jpayne@68: translations will be added to the 5.2.x branch anymore. jpayne@68: jpayne@68: - Renamed the French man page translation file from jpayne@68: fr_FR.po to fr.po and thus also its install directory jpayne@68: (like /usr/share/man/fr_FR -> .../fr). jpayne@68: jpayne@68: - Man page translations for upcoming 5.4.0 are now handled jpayne@68: in the Translation Project. jpayne@68: jpayne@68: * Update doc/faq.txt a little so it's less out-of-date. jpayne@68: jpayne@68: jpayne@68: 5.2.7 (2022-09-30) jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Made lzma_filters_copy() to never modify the destination jpayne@68: array if an error occurs. lzma_stream_encoder() and jpayne@68: lzma_stream_encoder_mt() already assumed this. Before this jpayne@68: change, if a tiny memory allocation in lzma_filters_copy() jpayne@68: failed it would lead to a crash (invalid free() or invalid jpayne@68: memory reads) in the cleanup paths of these two encoder jpayne@68: initialization functions. jpayne@68: jpayne@68: - Added missing integer overflow check to lzma_index_append(). jpayne@68: This affects xz --list and other applications that decode jpayne@68: the Index field from .xz files using lzma_index_decoder(). jpayne@68: Normal decompression of .xz files doesn't call this code jpayne@68: and thus most applications using liblzma aren't affected jpayne@68: by this bug. jpayne@68: jpayne@68: - Single-threaded .xz decoder (lzma_stream_decoder()): If jpayne@68: lzma_code() returns LZMA_MEMLIMIT_ERROR it is now possible jpayne@68: to use lzma_memlimit_set() to increase the limit and continue jpayne@68: decoding. This was supposed to work from the beginning jpayne@68: but there was a bug. With other decoders (.lzma or jpayne@68: threaded .xz decoder) this already worked correctly. jpayne@68: jpayne@68: - Fixed accumulation of integrity check type statistics in jpayne@68: lzma_index_cat(). This bug made lzma_index_checks() return jpayne@68: only the type of the integrity check of the last Stream jpayne@68: when multiple lzma_indexes were concatenated. Most jpayne@68: applications don't use these APIs but in xz it made jpayne@68: xz --list not list all check types from concatenated .xz jpayne@68: files. In xz --list --verbose only the per-file "Check:" jpayne@68: lines were affected and in xz --robot --list only the "file" jpayne@68: line was affected. jpayne@68: jpayne@68: - Added ABI compatibility with executables that were linked jpayne@68: against liblzma in RHEL/CentOS 7 or other liblzma builds jpayne@68: that had copied the problematic patch from RHEL/CentOS 7 jpayne@68: (xz-5.2.2-compat-libs.patch). For the details, see the jpayne@68: comment at the top of src/liblzma/validate_map.sh. jpayne@68: jpayne@68: WARNING: This uses __symver__ attribute with GCC >= 10. jpayne@68: In other cases the traditional __asm__(".symver ...") jpayne@68: is used. Using link-time optimization (LTO, -flto) with jpayne@68: GCC versions older than 10 can silently result in jpayne@68: broken liblzma.so.5 (incorrect symbol versions)! If you jpayne@68: want to use -flto with GCC, you must use GCC >= 10. jpayne@68: LTO with Clang seems to work even with the traditional jpayne@68: __asm__(".symver ...") method. jpayne@68: jpayne@68: * xzgrep: Fixed compatibility with old shells that break if jpayne@68: comments inside command substitutions have apostrophes ('). jpayne@68: This problem was introduced in 5.2.6. jpayne@68: jpayne@68: * Build systems: jpayne@68: jpayne@68: - New #define in config.h: HAVE_SYMBOL_VERSIONS_LINUX jpayne@68: jpayne@68: - Windows: Fixed liblzma.dll build with Visual Studio project jpayne@68: files. It broke in 5.2.6 due to a change that was made to jpayne@68: improve CMake support. jpayne@68: jpayne@68: - Windows: Building liblzma with UNICODE defined should now jpayne@68: work. jpayne@68: jpayne@68: - CMake files are now actually included in the release tarball. jpayne@68: They should have been in 5.2.5 already. jpayne@68: jpayne@68: - Minor CMake fixes and improvements. jpayne@68: jpayne@68: * Added a new translation: Turkish jpayne@68: jpayne@68: jpayne@68: 5.2.6 (2022-08-12) jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - The --keep option now accepts symlinks, hardlinks, and jpayne@68: setuid, setgid, and sticky files. Previously this required jpayne@68: using --force. jpayne@68: jpayne@68: - When copying metadata from the source file to the destination jpayne@68: file, don't try to set the group (GID) if it is already set jpayne@68: correctly. This avoids a failure on OpenBSD (and possibly on jpayne@68: a few other OSes) where files may get created so that their jpayne@68: group doesn't belong to the user, and fchown(2) can fail even jpayne@68: if it needs to do nothing. jpayne@68: jpayne@68: - Cap --memlimit-compress to 2000 MiB instead of 4020 MiB on jpayne@68: MIPS32 because on MIPS32 userspace processes are limited jpayne@68: to 2 GiB of address space. jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Fixed a missing error-check in the threaded encoder. If a jpayne@68: small memory allocation fails, a .xz file with an invalid jpayne@68: Index field would be created. Decompressing such a file would jpayne@68: produce the correct output but result in an error at the end. jpayne@68: Thus this is a "mild" data corruption bug. Note that while jpayne@68: a failed memory allocation can trigger the bug, it cannot jpayne@68: cause invalid memory access. jpayne@68: jpayne@68: - The decoder for .lzma files now supports files that have jpayne@68: uncompressed size stored in the header and still use the jpayne@68: end of payload marker (end of stream marker) at the end jpayne@68: of the LZMA stream. Such files are rare but, according to jpayne@68: the documentation in LZMA SDK, they are valid. jpayne@68: doc/lzma-file-format.txt was updated too. jpayne@68: jpayne@68: - Improved 32-bit x86 assembly files: jpayne@68: * Support Intel Control-flow Enforcement Technology (CET) jpayne@68: * Use non-executable stack on FreeBSD. jpayne@68: jpayne@68: - Visual Studio: Use non-standard _MSVC_LANG to detect C++ jpayne@68: standard version in the lzma.h API header. It's used to jpayne@68: detect when "noexcept" can be used. jpayne@68: jpayne@68: * xzgrep: jpayne@68: jpayne@68: - Fixed arbitrary command injection via a malicious filename jpayne@68: (CVE-2022-1271, ZDI-CAN-16587). A standalone patch for jpayne@68: this was released to the public on 2022-04-07. A slight jpayne@68: robustness improvement has been made since then and, if jpayne@68: using GNU or *BSD grep, a new faster method is now used jpayne@68: that doesn't use the old sed-based construct at all. This jpayne@68: also fixes bad output with GNU grep >= 3.5 (2020-09-27) jpayne@68: when xzgrepping binary files. jpayne@68: jpayne@68: This vulnerability was discovered by: jpayne@68: cleemy desu wayo working with Trend Micro Zero Day Initiative jpayne@68: jpayne@68: - Fixed detection of corrupt .bz2 files. jpayne@68: jpayne@68: - Improved error handling to fix exit status in some situations jpayne@68: and to fix handling of signals: in some situations a signal jpayne@68: didn't make xzgrep exit when it clearly should have. It's jpayne@68: possible that the signal handling still isn't quite perfect jpayne@68: but hopefully it's good enough. jpayne@68: jpayne@68: - Documented exit statuses on the man page. jpayne@68: jpayne@68: - xzegrep and xzfgrep now use "grep -E" and "grep -F" instead jpayne@68: of the deprecated egrep and fgrep commands. jpayne@68: jpayne@68: - Fixed parsing of the options -E, -F, -G, -P, and -X. The jpayne@68: problem occurred when multiple options were specified in jpayne@68: a single argument, for example, jpayne@68: jpayne@68: echo foo | xzgrep -Fe foo jpayne@68: jpayne@68: treated foo as a filename because -Fe wasn't correctly jpayne@68: split into -F -e. jpayne@68: jpayne@68: - Added zstd support. jpayne@68: jpayne@68: * xzdiff/xzcmp: jpayne@68: jpayne@68: - Fixed wrong exit status. Exit status could be 2 when the jpayne@68: correct value is 1. jpayne@68: jpayne@68: - Documented on the man page that exit status of 2 is used jpayne@68: for decompression errors. jpayne@68: jpayne@68: - Added zstd support. jpayne@68: jpayne@68: * xzless: jpayne@68: jpayne@68: - Fix less(1) version detection. It failed if the version number jpayne@68: from "less -V" contained a dot. jpayne@68: jpayne@68: * Translations: jpayne@68: jpayne@68: - Added new translations: Catalan, Croatian, Esperanto, jpayne@68: Korean, Portuguese, Romanian, Serbian, Spanish, Swedish, jpayne@68: and Ukrainian jpayne@68: jpayne@68: - Updated the Brazilian Portuguese translation. jpayne@68: jpayne@68: - Added French man page translation. This and the existing jpayne@68: German translation aren't complete anymore because the jpayne@68: English man pages got a few updates and the translators jpayne@68: weren't reached so that they could update their work. jpayne@68: jpayne@68: * Build systems: jpayne@68: jpayne@68: - Windows: Fix building of resource files when config.h isn't jpayne@68: used. CMake + Visual Studio can now build liblzma.dll. jpayne@68: jpayne@68: - Various fixes to the CMake support. Building static or shared jpayne@68: liblzma should work fine in most cases. In contrast, building jpayne@68: the command line tools with CMake is still clearly incomplete jpayne@68: and experimental and should be used for testing only. jpayne@68: jpayne@68: jpayne@68: 5.2.5 (2020-03-17) jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Fixed several C99/C11 conformance bugs. Now the code is clean jpayne@68: under gcc/clang -fsanitize=undefined. Some of these changes jpayne@68: might have a negative effect on performance with old GCC jpayne@68: versions or compilers other than GCC and Clang. The configure jpayne@68: option --enable-unsafe-type-punning can be used to (mostly) jpayne@68: restore the old behavior but it shouldn't normally be used. jpayne@68: jpayne@68: - Improved API documentation of lzma_properties_decode(). jpayne@68: jpayne@68: - Added a very minor encoder speed optimization. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Fixed a crash in "xz -dcfv not_an_xz_file". All four options jpayne@68: were required to trigger it. The crash occurred in the jpayne@68: progress indicator code when xz was in passthru mode where jpayne@68: xz works like "cat". jpayne@68: jpayne@68: - Fixed an integer overflow with 32-bit off_t. It could happen jpayne@68: when decompressing a file that has a long run of zero bytes jpayne@68: which xz would try to write as a sparse file. Since the build jpayne@68: system enables large file support by default, off_t is jpayne@68: normally 64-bit even on 32-bit systems. jpayne@68: jpayne@68: - Fixes for --flush-timeout: jpayne@68: * Fix semi-busy-waiting. jpayne@68: * Avoid unneeded flushes when no new input has arrived jpayne@68: since the previous flush was completed. jpayne@68: jpayne@68: - Added a special case for 32-bit xz: If --memlimit-compress is jpayne@68: used to specify a limit that exceeds 4020 MiB, the limit will jpayne@68: be set to 4020 MiB. The values "0" and "max" aren't affected jpayne@68: by this and neither is decompression. This hack can be jpayne@68: helpful when a 32-bit xz has access to 4 GiB address space jpayne@68: but the specified memlimit exceeds 4 GiB. This can happen jpayne@68: e.g. with some scripts. jpayne@68: jpayne@68: - Capsicum sandbox is now enabled by default where available jpayne@68: (FreeBSD >= 10). The sandbox debug messages (xz -vv) were jpayne@68: removed since they seemed to be more annoying than useful. jpayne@68: jpayne@68: - DOS build now requires DJGPP 2.05 instead of 2.04beta. jpayne@68: A workaround for a locale problem with DJGPP 2.05 was added. jpayne@68: jpayne@68: * xzgrep and other scripts: jpayne@68: jpayne@68: - Added a configure option --enable-path-for-scripts=PREFIX. jpayne@68: It is disabled by default except on Solaris where the default jpayne@68: is /usr/xpg4/bin. See INSTALL for details. jpayne@68: jpayne@68: - Added a workaround for a POSIX shell detection problem on jpayne@68: Solaris. jpayne@68: jpayne@68: * Build systems: jpayne@68: jpayne@68: - Added preliminary build instructions for z/OS. See INSTALL jpayne@68: section 1.2.9. jpayne@68: jpayne@68: - Experimental CMake support was added. It should work to build jpayne@68: static liblzma on a few operating systems. It may or may not jpayne@68: work to build shared liblzma. On some platforms it can build jpayne@68: xz and xzdec too but those are only for testing. See the jpayne@68: comment in the beginning of CMakeLists.txt for details. jpayne@68: jpayne@68: - Visual Studio project files were updated. jpayne@68: WindowsTargetPlatformVersion was removed from VS2017 files jpayne@68: and set to "10.0" in the added VS2019 files. In the future jpayne@68: the VS project files will be removed when CMake support is jpayne@68: good enough. jpayne@68: jpayne@68: - New #defines in config.h: HAVE___BUILTIN_ASSUME_ALIGNED, jpayne@68: HAVE___BUILTIN_BSWAPXX, and TUKLIB_USE_UNSAFE_TYPE_PUNNING. jpayne@68: jpayne@68: - autogen.sh has a new optional dependency on po4a and a new jpayne@68: option --no-po4a to skip that step. This matters only if one jpayne@68: wants to remake the build files. po4a is used to update the jpayne@68: translated man pages but as long as the man pages haven't jpayne@68: been modified, there's nothing to update and one can use jpayne@68: --no-po4a to avoid the dependency on po4a. jpayne@68: jpayne@68: * Translations: jpayne@68: jpayne@68: - XZ Utils translations are now handled by the Translation jpayne@68: Project: https://translationproject.org/domain/xz.html jpayne@68: jpayne@68: - All man pages are now included in German too. jpayne@68: jpayne@68: - New xz translations: Brazilian Portuguese, Finnish, jpayne@68: Hungarian, Chinese (simplified), Chinese (traditional), jpayne@68: and Danish (partial translation) jpayne@68: jpayne@68: - Updated xz translations: French, German, Italian, and Polish jpayne@68: jpayne@68: - Unfortunately a few new xz translations weren't included due jpayne@68: to technical problems like too long lines in --help output or jpayne@68: misaligned column headings in tables. In the future, many of jpayne@68: these strings will be split and e.g. the table column jpayne@68: alignment will be handled in software. This should make the jpayne@68: strings easier to translate. jpayne@68: jpayne@68: jpayne@68: 5.2.4 (2018-04-29) jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Allow 0 as memory usage limit instead of returning jpayne@68: LZMA_PROG_ERROR. Now 0 is treated as if 1 byte was specified, jpayne@68: which effectively is the same as 0. jpayne@68: jpayne@68: - Use "noexcept" keyword instead of "throw()" in the public jpayne@68: headers when a C++11 (or newer standard) compiler is used. jpayne@68: jpayne@68: - Added a portability fix for recent Intel C Compilers. jpayne@68: jpayne@68: - Microsoft Visual Studio build files have been moved under jpayne@68: windows/vs2013 and windows/vs2017. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Fix "xz --list --robot missing_or_bad_file.xz" which would jpayne@68: try to print an uninitialized string and thus produce garbage jpayne@68: output. Since the exit status is non-zero, most uses of such jpayne@68: a command won't try to interpret the garbage output. jpayne@68: jpayne@68: - "xz --list foo.xz" could print "Internal error (bug)" in a jpayne@68: corner case where a specific memory usage limit had been set. jpayne@68: jpayne@68: jpayne@68: 5.2.3 (2016-12-30) jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Always close a file before trying to delete it to avoid jpayne@68: problems on some operating system and file system combinations. jpayne@68: jpayne@68: - Fixed copying of file timestamps on Windows. jpayne@68: jpayne@68: - Added experimental (disabled by default) sandbox support using jpayne@68: Capsicum (FreeBSD >= 10). See --enable-sandbox in INSTALL. jpayne@68: jpayne@68: * C99/C11 conformance fixes to liblzma. The issues affected at least jpayne@68: some builds using link-time optimizations. jpayne@68: jpayne@68: * Fixed bugs in the rarely-used function lzma_index_dup(). jpayne@68: jpayne@68: * Use of external SHA-256 code is now disabled by default. jpayne@68: It can still be enabled by passing --enable-external-sha256 jpayne@68: to configure. The reasons to disable it by default (see INSTALL jpayne@68: for more details): jpayne@68: jpayne@68: - Some OS-specific SHA-256 implementations conflict with jpayne@68: OpenSSL and cause problems in programs that link against both jpayne@68: liblzma and libcrypto. At least FreeBSD 10 and MINIX 3.3.0 jpayne@68: are affected. jpayne@68: jpayne@68: - The internal SHA-256 is faster than the SHA-256 code in jpayne@68: some operating systems. jpayne@68: jpayne@68: * Changed CPU core count detection to use sched_getaffinity() on jpayne@68: GNU/Linux and GNU/kFreeBSD. jpayne@68: jpayne@68: * Fixes to the build-system and xz to make xz buildable even when jpayne@68: encoders, decoders, or threading have been disabled from libilzma jpayne@68: using configure options. These fixes added two new #defines to jpayne@68: config.h: HAVE_ENCODERS and HAVE_DECODERS. jpayne@68: jpayne@68: jpayne@68: 5.2.2 (2015-09-29) jpayne@68: jpayne@68: * Fixed bugs in QNX-specific code. jpayne@68: jpayne@68: * Omitted the use of pipe2() even if it is available to avoid jpayne@68: portability issues with some old Linux and glibc combinations. jpayne@68: jpayne@68: * Updated German translation. jpayne@68: jpayne@68: * Added project files to build static and shared liblzma (not the jpayne@68: whole XZ Utils) with Visual Studio 2013 update 2 or later. jpayne@68: jpayne@68: * Documented that threaded decompression hasn't been implemented jpayne@68: yet. A 5.2.0 NEWS entry describing multi-threading support had jpayne@68: incorrectly said "decompression" when it should have said jpayne@68: "compression". jpayne@68: jpayne@68: jpayne@68: 5.2.1 (2015-02-26) jpayne@68: jpayne@68: * Fixed a compression-ratio regression in fast mode of LZMA1 and jpayne@68: LZMA2. The bug is present in 5.1.4beta and 5.2.0 releases. jpayne@68: jpayne@68: * Fixed a portability problem in xz that affected at least OpenBSD. jpayne@68: jpayne@68: * Fixed xzdiff to be compatible with FreeBSD's mktemp which differs jpayne@68: from most other mktemp implementations. jpayne@68: jpayne@68: * Changed CPU core count detection to use cpuset_getaffinity() on jpayne@68: FreeBSD. jpayne@68: jpayne@68: jpayne@68: 5.2.0 (2014-12-21) jpayne@68: jpayne@68: Since 5.1.4beta: jpayne@68: jpayne@68: * All fixes from 5.0.8 jpayne@68: jpayne@68: * liblzma: Fixed lzma_stream_encoder_mt_memusage() when a preset jpayne@68: was used. jpayne@68: jpayne@68: * xzdiff: If mktemp isn't installed, mkdir will be used as jpayne@68: a fallback to create a temporary directory. Installing mktemp jpayne@68: is still recommended. jpayne@68: jpayne@68: * Updated French, German, Italian, Polish, and Vietnamese jpayne@68: translations. jpayne@68: jpayne@68: Summary of fixes and new features added in the 5.1.x development jpayne@68: releases: jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Added support for multi-threaded compression. See the jpayne@68: lzma_mt structure, lzma_stream_encoder_mt(), and jpayne@68: lzma_stream_encoder_mt_memusage() in , jpayne@68: lzma_get_progress() in , and lzma_cputhreads() jpayne@68: in for details. jpayne@68: jpayne@68: - Made the uses of lzma_allocator const correct. jpayne@68: jpayne@68: - Added lzma_block_uncomp_encode() to create uncompressed jpayne@68: .xz Blocks using LZMA2 uncompressed chunks. jpayne@68: jpayne@68: - Added support for LZMA_IGNORE_CHECK. jpayne@68: jpayne@68: - A few speed optimizations were made. jpayne@68: jpayne@68: - Added support for symbol versioning. It is enabled by default jpayne@68: on GNU/Linux, other GNU-based systems, and FreeBSD. jpayne@68: jpayne@68: - liblzma (not the whole XZ Utils) should now be buildable jpayne@68: with MSVC 2013 update 2 or later using windows/config.h. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Fixed a race condition in the signal handling. It was jpayne@68: possible that e.g. the first SIGINT didn't make xz exit jpayne@68: if reading or writing blocked and one had bad luck. The fix jpayne@68: is non-trivial, so as of writing it is unknown if it will be jpayne@68: backported to the v5.0 branch. jpayne@68: jpayne@68: - Multi-threaded compression can be enabled with the jpayne@68: --threads (-T) option. jpayne@68: [Fixed: This originally said "decompression".] jpayne@68: jpayne@68: - New command line options in xz: --single-stream, jpayne@68: --block-size=SIZE, --block-list=SIZES, jpayne@68: --flush-timeout=TIMEOUT, and --ignore-check. jpayne@68: jpayne@68: - xz -lvv now shows the minimum xz version that is required to jpayne@68: decompress the file. Currently it is 5.0.0 for all supported jpayne@68: .xz files except files with empty LZMA2 streams require 5.0.2. jpayne@68: jpayne@68: * xzdiff and xzgrep now support .lzo files if lzop is installed. jpayne@68: The .tzo suffix is also recognized as a shorthand for .tar.lzo. jpayne@68: jpayne@68: jpayne@68: 5.1.4beta (2014-09-14) jpayne@68: jpayne@68: * All fixes from 5.0.6 jpayne@68: jpayne@68: * liblzma: Fixed the use of presets in threaded encoder jpayne@68: initialization. jpayne@68: jpayne@68: * xz --block-list and --block-size can now be used together jpayne@68: in single-threaded mode. Previously the combination only jpayne@68: worked in multi-threaded mode. jpayne@68: jpayne@68: * Added support for LZMA_IGNORE_CHECK to liblzma and made it jpayne@68: available in xz as --ignore-check. jpayne@68: jpayne@68: * liblzma speed optimizations: jpayne@68: jpayne@68: - Initialization of a new LZMA1 or LZMA2 encoder has been jpayne@68: optimized. (The speed of reinitializing an already-allocated jpayne@68: encoder isn't affected.) This helps when compressing many jpayne@68: small buffers with lzma_stream_buffer_encode() and other jpayne@68: similar situations where an already-allocated encoder state jpayne@68: isn't reused. This speed-up is visible in xz too if one jpayne@68: compresses many small files one at a time instead running xz jpayne@68: once and giving all files as command-line arguments. jpayne@68: jpayne@68: - Buffer comparisons are now much faster when unaligned access jpayne@68: is allowed (configured with --enable-unaligned-access). This jpayne@68: speeds up encoding significantly. There is arch-specific code jpayne@68: for 32-bit and 64-bit x86 (32-bit needs SSE2 for the best jpayne@68: results and there's no run-time CPU detection for now). jpayne@68: For other archs there is only generic code which probably jpayne@68: isn't as optimal as arch-specific solutions could be. jpayne@68: jpayne@68: - A few speed optimizations were made to the SHA-256 code. jpayne@68: (Note that the builtin SHA-256 code isn't used on all jpayne@68: operating systems.) jpayne@68: jpayne@68: * liblzma can now be built with MSVC 2013 update 2 or later jpayne@68: using windows/config.h. jpayne@68: jpayne@68: * Vietnamese translation was added. jpayne@68: jpayne@68: jpayne@68: 5.1.3alpha (2013-10-26) jpayne@68: jpayne@68: * All fixes from 5.0.5 jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Fixed a deadlock in the threaded encoder. jpayne@68: jpayne@68: - Made the uses of lzma_allocator const correct. jpayne@68: jpayne@68: - Added lzma_block_uncomp_encode() to create uncompressed jpayne@68: .xz Blocks using LZMA2 uncompressed chunks. jpayne@68: jpayne@68: - Added support for native threads on Windows and the ability jpayne@68: to detect the number of CPU cores. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Fixed a race condition in the signal handling. It was jpayne@68: possible that e.g. the first SIGINT didn't make xz exit jpayne@68: if reading or writing blocked and one had bad luck. The fix jpayne@68: is non-trivial, so as of writing it is unknown if it will be jpayne@68: backported to the v5.0 branch. jpayne@68: jpayne@68: - Made the progress indicator work correctly in threaded mode. jpayne@68: jpayne@68: - Threaded encoder now works together with --block-list=SIZES. jpayne@68: jpayne@68: - Added preliminary support for --flush-timeout=TIMEOUT. jpayne@68: It can be useful for (somewhat) real-time streaming. For jpayne@68: now the decompression side has to be done with something jpayne@68: else than the xz tool due to how xz does buffering, but this jpayne@68: should be fixed. jpayne@68: jpayne@68: jpayne@68: 5.1.2alpha (2012-07-04) jpayne@68: jpayne@68: * All fixes from 5.0.3 and 5.0.4 jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Fixed a deadlock and an invalid free() in the threaded encoder. jpayne@68: jpayne@68: - Added support for symbol versioning. It is enabled by default jpayne@68: on GNU/Linux, other GNU-based systems, and FreeBSD. jpayne@68: jpayne@68: - Use SHA-256 implementation from the operating system if one is jpayne@68: available in libc, libmd, or libutil. liblzma won't use e.g. jpayne@68: OpenSSL or libgcrypt to avoid introducing new dependencies. jpayne@68: jpayne@68: - Fixed liblzma.pc for static linking. jpayne@68: jpayne@68: - Fixed a few portability bugs. jpayne@68: jpayne@68: * xz --decompress --single-stream now fixes the input position after jpayne@68: successful decompression. Now the following works: jpayne@68: jpayne@68: echo foo | xz > foo.xz jpayne@68: echo bar | xz >> foo.xz jpayne@68: ( xz -dc --single-stream ; xz -dc --single-stream ) < foo.xz jpayne@68: jpayne@68: Note that it doesn't work if the input is not seekable jpayne@68: or if there is Stream Padding between the concatenated jpayne@68: .xz Streams. jpayne@68: jpayne@68: * xz -lvv now shows the minimum xz version that is required to jpayne@68: decompress the file. Currently it is 5.0.0 for all supported .xz jpayne@68: files except files with empty LZMA2 streams require 5.0.2. jpayne@68: jpayne@68: * Added an *incomplete* implementation of --block-list=SIZES to xz. jpayne@68: It only works correctly in single-threaded mode and when jpayne@68: --block-size isn't used at the same time. --block-list allows jpayne@68: specifying the sizes of Blocks which can be useful e.g. when jpayne@68: creating files for random-access reading. jpayne@68: jpayne@68: jpayne@68: 5.1.1alpha (2011-04-12) jpayne@68: jpayne@68: * All fixes from 5.0.2 jpayne@68: jpayne@68: * liblzma fixes that will also be included in 5.0.3: jpayne@68: jpayne@68: - A memory leak was fixed. jpayne@68: jpayne@68: - lzma_stream_buffer_encode() no longer creates an empty .xz jpayne@68: Block if encoding an empty buffer. Such an empty Block with jpayne@68: LZMA2 data would trigger a bug in 5.0.1 and older (see the jpayne@68: first bullet point in 5.0.2 notes). When releasing 5.0.2, jpayne@68: I thought that no encoder creates this kind of files but jpayne@68: I was wrong. jpayne@68: jpayne@68: - Validate function arguments better in a few functions. Most jpayne@68: importantly, specifying an unsupported integrity check to jpayne@68: lzma_stream_buffer_encode() no longer creates a corrupt .xz jpayne@68: file. Probably no application tries to do that, so this jpayne@68: shouldn't be a big problem in practice. jpayne@68: jpayne@68: - Document that lzma_block_buffer_encode(), jpayne@68: lzma_easy_buffer_encode(), lzma_stream_encoder(), and jpayne@68: lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK. jpayne@68: jpayne@68: - The return values of the _memusage() functions are now jpayne@68: documented better. jpayne@68: jpayne@68: * Support for multithreaded compression was added using the simplest jpayne@68: method, which splits the input data into blocks and compresses jpayne@68: them independently. Other methods will be added in the future. jpayne@68: The current method has room for improvement, e.g. it is possible jpayne@68: to reduce the memory usage. jpayne@68: jpayne@68: * Added the options --single-stream and --block-size=SIZE to xz. jpayne@68: jpayne@68: * xzdiff and xzgrep now support .lzo files if lzop is installed. jpayne@68: The .tzo suffix is also recognized as a shorthand for .tar.lzo. jpayne@68: jpayne@68: * Support for short 8.3 filenames under DOS was added to xz. It is jpayne@68: experimental and may change before it gets into a stable release. jpayne@68: jpayne@68: jpayne@68: 5.0.8 (2014-12-21) jpayne@68: jpayne@68: * Fixed an old bug in xzgrep that affected OpenBSD and probably jpayne@68: a few other operating systems too. jpayne@68: jpayne@68: * Updated French and German translations. jpayne@68: jpayne@68: * Added support for detecting the amount of RAM on AmigaOS/AROS. jpayne@68: jpayne@68: * Minor build system updates. jpayne@68: jpayne@68: jpayne@68: 5.0.7 (2014-09-20) jpayne@68: jpayne@68: * Fix regressions introduced in 5.0.6: jpayne@68: jpayne@68: - Fix building with non-GNU make. jpayne@68: jpayne@68: - Fix invalid Libs.private value in liblzma.pc which broke jpayne@68: static linking against liblzma if the linker flags were jpayne@68: taken from pkg-config. jpayne@68: jpayne@68: jpayne@68: 5.0.6 (2014-09-14) jpayne@68: jpayne@68: * xzgrep now exits with status 0 if at least one file matched. jpayne@68: jpayne@68: * A few minor portability and build system fixes jpayne@68: jpayne@68: jpayne@68: 5.0.5 (2013-06-30) jpayne@68: jpayne@68: * lzmadec and liblzma's lzma_alone_decoder(): Support decompressing jpayne@68: .lzma files that have less common settings in the headers jpayne@68: (dictionary size other than 2^n or 2^n + 2^(n-1), or uncompressed jpayne@68: size greater than 256 GiB). The limitations existed to avoid false jpayne@68: positives when detecting .lzma files. The lc + lp <= 4 limitation jpayne@68: still remains since liblzma's LZMA decoder has that limitation. jpayne@68: jpayne@68: NOTE: xz's .lzma support or liblzma's lzma_auto_decoder() are NOT jpayne@68: affected by this change. They still consider uncommon .lzma headers jpayne@68: as not being in the .lzma format. Changing this would give way too jpayne@68: many false positives. jpayne@68: jpayne@68: * xz: jpayne@68: jpayne@68: - Interaction of preset and custom filter chain options was jpayne@68: made less illogical. This affects only certain less typical jpayne@68: uses cases so few people are expected to notice this change. jpayne@68: jpayne@68: Now when a custom filter chain option (e.g. --lzma2) is jpayne@68: specified, all preset options (-0 ... -9, -e) earlier are on jpayne@68: the command line are completely forgotten. Similarly, when jpayne@68: a preset option is specified, all custom filter chain options jpayne@68: earlier on the command line are completely forgotten. jpayne@68: jpayne@68: Example 1: "xz -9 --lzma2=preset=5 -e" is equivalent to "xz -e" jpayne@68: which is equivalent to "xz -6e". Earlier -e didn't put xz back jpayne@68: into preset mode and thus the example command was equivalent jpayne@68: to "xz --lzma2=preset=5". jpayne@68: jpayne@68: Example 2: "xz -9e --lzma2=preset=5 -7" is equivalent to jpayne@68: "xz -7". Earlier a custom filter chain option didn't make jpayne@68: xz forget the -e option so the example was equivalent to jpayne@68: "xz -7e". jpayne@68: jpayne@68: - Fixes and improvements to error handling. jpayne@68: jpayne@68: - Various fixes to the man page. jpayne@68: jpayne@68: * xzless: Fixed to work with "less" versions 448 and later. jpayne@68: jpayne@68: * xzgrep: Made -h an alias for --no-filename. jpayne@68: jpayne@68: * Include the previously missing debug/translation.bash which can jpayne@68: be useful for translators. jpayne@68: jpayne@68: * Include a build script for Mac OS X. This has been in the Git jpayne@68: repository since 2010 but due to a mistake in Makefile.am the jpayne@68: script hasn't been included in a release tarball before. jpayne@68: jpayne@68: jpayne@68: 5.0.4 (2012-06-22) jpayne@68: jpayne@68: * liblzma: jpayne@68: jpayne@68: - Fix lzma_index_init(). It could crash if memory allocation jpayne@68: failed. jpayne@68: jpayne@68: - Fix the possibility of an incorrect LZMA_BUF_ERROR when a BCJ jpayne@68: filter is used and the application only provides exactly as jpayne@68: much output space as is the uncompressed size of the file. jpayne@68: jpayne@68: - Fix a bug in doc/examples_old/xz_pipe_decompress.c. It didn't jpayne@68: check if the last call to lzma_code() really returned jpayne@68: LZMA_STREAM_END, which made the program think that truncated jpayne@68: files are valid. jpayne@68: jpayne@68: - New example programs in doc/examples (old programs are now in jpayne@68: doc/examples_old). These have more comments and more detailed jpayne@68: error handling. jpayne@68: jpayne@68: * Fix "xz -lvv foo.xz". It could crash on some corrupted files. jpayne@68: jpayne@68: * Fix output of "xz --robot -lv" and "xz --robot -lvv" which jpayne@68: incorrectly printed the filename also in the "foo (x/x)" format. jpayne@68: jpayne@68: * Fix exit status of "xzdiff foo.xz bar.xz". jpayne@68: jpayne@68: * Fix exit status of "xzgrep foo binary_file". jpayne@68: jpayne@68: * Fix portability to EBCDIC systems. jpayne@68: jpayne@68: * Fix a configure issue on AIX with the XL C compiler. See INSTALL jpayne@68: for details. jpayne@68: jpayne@68: * Update French, German, Italian, and Polish translations. jpayne@68: jpayne@68: jpayne@68: 5.0.3 (2011-05-21) jpayne@68: jpayne@68: * liblzma fixes: jpayne@68: jpayne@68: - A memory leak was fixed. jpayne@68: jpayne@68: - lzma_stream_buffer_encode() no longer creates an empty .xz jpayne@68: Block if encoding an empty buffer. Such an empty Block with jpayne@68: LZMA2 data would trigger a bug in 5.0.1 and older (see the jpayne@68: first bullet point in 5.0.2 notes). When releasing 5.0.2, jpayne@68: I thought that no encoder creates this kind of files but jpayne@68: I was wrong. jpayne@68: jpayne@68: - Validate function arguments better in a few functions. Most jpayne@68: importantly, specifying an unsupported integrity check to jpayne@68: lzma_stream_buffer_encode() no longer creates a corrupt .xz jpayne@68: file. Probably no application tries to do that, so this jpayne@68: shouldn't be a big problem in practice. jpayne@68: jpayne@68: - Document that lzma_block_buffer_encode(), jpayne@68: lzma_easy_buffer_encode(), lzma_stream_encoder(), and jpayne@68: lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK. jpayne@68: jpayne@68: - The return values of the _memusage() functions are now jpayne@68: documented better. jpayne@68: jpayne@68: * Fix command name detection in xzgrep. xzegrep and xzfgrep now jpayne@68: correctly use egrep and fgrep instead of grep. jpayne@68: jpayne@68: * French translation was added. jpayne@68: jpayne@68: jpayne@68: 5.0.2 (2011-04-01) jpayne@68: jpayne@68: * LZMA2 decompressor now correctly accepts LZMA2 streams with no jpayne@68: uncompressed data. Previously it considered them corrupt. The jpayne@68: bug can affect applications that use raw LZMA2 streams. It is jpayne@68: very unlikely to affect .xz files because no compressor creates jpayne@68: .xz files with empty LZMA2 streams. (Empty .xz files are a jpayne@68: different thing than empty LZMA2 streams.) jpayne@68: jpayne@68: * "xz --suffix=.foo filename.foo" now refuses to compress the jpayne@68: file due to it already having the suffix .foo. It was already jpayne@68: documented on the man page, but the code lacked the test. jpayne@68: jpayne@68: * "xzgrep -l foo bar.xz" works now. jpayne@68: jpayne@68: * Polish translation was added. jpayne@68: jpayne@68: jpayne@68: 5.0.1 (2011-01-29) jpayne@68: jpayne@68: * xz --force now (de)compresses files that have setuid, setgid, jpayne@68: or sticky bit set and files that have multiple hard links. jpayne@68: The man page had it documented this way already, but the code jpayne@68: had a bug. jpayne@68: jpayne@68: * gzip and bzip2 support in xzdiff was fixed. jpayne@68: jpayne@68: * Portability fixes jpayne@68: jpayne@68: * Minor fix to Czech translation jpayne@68: jpayne@68: jpayne@68: 5.0.0 (2010-10-23) jpayne@68: jpayne@68: Only the most important changes compared to 4.999.9beta are listed jpayne@68: here. One change is especially important: jpayne@68: jpayne@68: * The memory usage limit is now disabled by default. Some scripts jpayne@68: written before this change may have used --memory=max on xz command jpayne@68: line or in XZ_OPT. THESE USES OF --memory=max SHOULD BE REMOVED jpayne@68: NOW, because they interfere with user's ability to set the memory jpayne@68: usage limit himself. If user-specified limit causes problems to jpayne@68: your script, blame the user. jpayne@68: jpayne@68: Other significant changes: jpayne@68: jpayne@68: * Added support for XZ_DEFAULTS environment variable. This variable jpayne@68: allows users to set default options for xz, e.g. default memory jpayne@68: usage limit or default compression level. Scripts that use xz jpayne@68: must never set or unset XZ_DEFAULTS. Scripts should use XZ_OPT jpayne@68: instead if they need a way to pass options to xz via an jpayne@68: environment variable. jpayne@68: jpayne@68: * The compression settings associated with the preset levels jpayne@68: -0 ... -9 have been changed. --extreme was changed a little too. jpayne@68: It is now less likely to make compression worse, but with some jpayne@68: files the new --extreme may compress slightly worse than the old jpayne@68: --extreme. jpayne@68: jpayne@68: * If a preset level (-0 ... -9) is specified after a custom filter jpayne@68: chain options have been used (e.g. --lzma2), the custom filter jpayne@68: chain will be forgotten. Earlier the preset options were jpayne@68: completely ignored after custom filter chain options had been jpayne@68: seen. jpayne@68: jpayne@68: * xz will create sparse files when decompressing if the uncompressed jpayne@68: data contains long sequences of binary zeros. This is done even jpayne@68: when writing to standard output that is connected to a regular jpayne@68: file and certain additional conditions are met to make it safe. jpayne@68: jpayne@68: * Support for "xz --list" was added. Combine with --verbose or jpayne@68: --verbose --verbose (-vv) for detailed output. jpayne@68: jpayne@68: * I had hoped that liblzma API would have been stable after jpayne@68: 4.999.9beta, but there have been a couple of changes in the jpayne@68: advanced features, which don't affect most applications: jpayne@68: jpayne@68: - Index handling code was revised. If you were using the old jpayne@68: API, you will get a compiler error (so it's easy to notice). jpayne@68: jpayne@68: - A subtle but important change was made to the Block handling jpayne@68: API. lzma_block.version has to be initialized even for jpayne@68: lzma_block_header_decode(). Code that doesn't do it will work jpayne@68: for now, but might break in the future, which makes this API jpayne@68: change easy to miss. jpayne@68: jpayne@68: * The major soname has been bumped to 5.0.0. liblzma API and ABI jpayne@68: are now stable, so the need to recompile programs linking against jpayne@68: liblzma shouldn't arise soon. jpayne@68: