7 This bumps the minor version of liblzma because new features were
8 added. The API and ABI are still backward compatible with liblzma
13 * All fixes from 5.2.10.
15 * The ARM64 filter is now stable. The xz option is now --arm64.
16 Decompression requires XZ Utils 5.4.0. In the future the ARM64
17 filter will be supported by XZ for Java, XZ Embedded (including
18 the version in Linux), LZMA SDK, and 7-Zip.
22 - Updated Catalan, Croatian, German, Romanian, and Turkish
25 - Updated German man page translations.
27 - Added Romanian man page translations.
29 Summary of new features added in the 5.3.x development releases:
33 - Added threaded .xz decompressor lzma_stream_decoder_mt().
34 It can use multiple threads with .xz files that have multiple
35 Blocks with size information in Block Headers. The threaded
36 encoder in xz has always created such files.
38 Single-threaded encoder cannot store the size information in
39 Block Headers even if one used LZMA_FULL_FLUSH to create
40 multiple Blocks, so this threaded decoder cannot use multiple
41 threads with such files.
43 If there are multiple Streams (concatenated .xz files), one
44 Stream will be decompressed completely before starting the
47 - A new decoder flag LZMA_FAIL_FAST was added. It makes the
48 threaded decompressor report errors soon instead of first
49 flushing all pending data before the error location.
52 * LZMA_FILTER_ARM64 is for ARM64 binaries.
53 * LZMA_FILTER_LZMA1EXT is for raw LZMA1 streams that don't
54 necessarily use the end marker.
56 - Added lzma_str_to_filters(), lzma_str_from_filters(), and
57 lzma_str_list_filters() to convert a preset or a filter chain
58 string to a lzma_filter[] and vice versa. These should make
59 it easier to write applications that allow users to specify
60 custom compression options.
62 - Added lzma_filters_free() which can be convenient for freeing
63 the filter options in a filter chain (an array of lzma_filter
66 - lzma_file_info_decoder() to makes it a little easier to get
67 the Index field from .xz files. This helps in getting the
68 uncompressed file size but an easy-to-use random access
69 API is still missing which has existed in XZ for Java for
72 - Added lzma_microlzma_encoder() and lzma_microlzma_decoder().
73 It is used by erofs-utils and may be used by others too.
75 The MicroLZMA format is a raw LZMA stream (without end marker)
76 whose first byte (always 0x00) has been replaced with
77 bitwise-negation of the LZMA properties (lc/lp/pb). It was
78 created for use in EROFS but may be used in other contexts
79 as well where it is important to avoid wasting bytes for
80 stream headers or footers. The format is also supported by
81 XZ Embedded (the XZ Embedded version in Linux got MicroLZMA
82 support in Linux 5.16).
84 The MicroLZMA encoder API in liblzma can compress into a
85 fixed-sized output buffer so that as much data is compressed
86 as can be fit into the buffer while still creating a valid
87 MicroLZMA stream. This is needed for EROFS.
89 - Added lzma_lzip_decoder() to decompress the .lz (lzip) file
90 format version 0 and the original unextended version 1 files.
91 Also lzma_auto_decoder() supports .lz files.
93 - lzma_filters_update() can now be used with the multi-threaded
94 encoder (lzma_stream_encoder_mt()) to change the filter chain
95 after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH.
97 - In lzma_options_lzma, allow nice_len = 2 and 3 with the match
98 finders that require at least 3 or 4. Now it is internally
101 - CLMUL-based CRC64 on x86-64 and E2K with runtime processor
102 detection. On 32-bit x86 it currently isn't available unless
103 --disable-assembler is used which can make the non-CLMUL
104 CRC64 slower; this might be fixed in the future.
106 - Building with --disable-threads --enable-small
107 is now thread-safe if the compiler supports
108 __attribute__((__constructor__)).
112 - Using -T0 (--threads=0) will now use multi-threaded encoder
113 even on a single-core system. This is to ensure that output
114 from the same xz binary is identical on both single-core and
117 - --threads=+1 or -T+1 is now a way to put xz into
118 multi-threaded mode while using only one worker thread.
119 The + is ignored if the number is not 1.
121 - A default soft memory usage limit is now used for compression
122 when -T0 is used and no explicit limit has been specified.
123 This soft limit is used to restrict the number of threads
124 but if the limit is exceeded with even one thread then xz
125 will continue with one thread using the multi-threaded
126 encoder and this limit is ignored. If the number of threads
127 is specified manually then no default limit will be used;
128 this affects only -T0.
130 This change helps on systems that have very many cores and
131 using all of them for xz makes no sense. Previously xz -T0
132 could run out of memory on such systems because it attempted
133 to reserve memory for too many threads.
135 This also helps with 32-bit builds which don't have a large
136 amount of address space that would be required for many
137 threads. The default soft limit for -T0 is at most 1400 MiB
138 on all 32-bit platforms.
140 - Previously a low value in --memlimit-compress wouldn't cause
141 xz to switch from multi-threaded mode to single-threaded mode
142 if the limit cannot otherwise be met; xz failed instead. Now
143 xz can switch to single-threaded mode and then, if needed,
144 scale down the LZMA2 dictionary size too just like it already
145 did when it was started in single-threaded mode.
147 - The option --no-adjust no longer prevents xz from scaling down
148 the number of threads as that doesn't affect the compressed
149 output (only performance). Now --no-adjust only prevents
150 adjustments that affect compressed output, that is, with
151 --no-adjust xz won't switch from multi-threaded mode to
152 single-threaded mode and won't scale down the LZMA2
155 - Added a new option --memlimit-mt-decompress=LIMIT. This is
156 used to limit the number of decompressor threads (possibly
157 falling back to single-threaded mode) but it will never make
158 xz refuse to decompress a file. This has a system-specific
159 default value because without any limit xz could end up
160 allocating memory for the whole compressed input file, the
161 whole uncompressed output file, multiple thread-specific
162 decompressor instances and so on. Basically xz could
163 attempt to use an insane amount of memory even with fairly
164 common files. The system-specific default value is currently
165 the same as the one used for compression with -T0.
167 The new option works together with the existing option
168 --memlimit-decompress=LIMIT. The old option sets a hard limit
169 that must not be exceeded (xz will refuse to decompress)
170 while the new option only restricts the number of threads.
171 If the limit set with --memlimit-mt-decompress is greater
172 than the limit set with --memlimit-compress, then the latter
173 value is used also for --memlimit-mt-decompress.
175 - Added new information to the output of xz --info-memory and
176 new fields to the output of xz --robot --info-memory.
178 - In --lzma2=nice=NUMBER allow 2 and 3 with all match finders
179 now that liblzma handles it.
181 - Don't mention endianness for ARM and ARM-Thumb filters in
182 --long-help. The filters only work for little endian
183 instruction encoding but modern ARM processors using
184 big endian data access still use little endian
185 instruction encoding. So the help text was misleading.
186 In contrast, the PowerPC filter is only for big endian
187 32/64-bit PowerPC code. Little endian PowerPC would need
190 - Added decompression support for the .lz (lzip) file format
191 version 0 and the original unextended version 1. It is
192 autodetected by default. See also the option --format on
195 - Sandboxing enabled by default:
197 * pledge(2) (OpenBSD)
199 * Scripts now support the .lz format using xz.
201 * A few new tests were added.
203 * The liblzma-specific tests are now supported in CMake-based
204 builds too ("make test").
207 5.3.5beta (2022-12-01)
209 * All fixes from 5.2.9.
213 - Added new LZMA_FILTER_LZMA1EXT for raw encoder and decoder to
214 handle raw LZMA1 streams that don't have end of payload marker
215 (EOPM) alias end of stream (EOS) marker. It can be used in
216 filter chains, for example, with the x86 BCJ filter.
218 - Added lzma_str_to_filters(), lzma_str_from_filters(), and
219 lzma_str_list_filters() to make it easier for applications
220 to get custom compression options from a user and convert
221 it to an array of lzma_filter structures.
223 - Added lzma_filters_free().
225 - lzma_filters_update() can now be used with the multi-threaded
226 encoder (lzma_stream_encoder_mt()) to change the filter chain
227 after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH.
229 - In lzma_options_lzma, allow nice_len = 2 and 3 with the match
230 finders that require at least 3 or 4. Now it is internally
231 rounded up if needed.
233 - ARM64 filter was modified. It is still experimental.
235 - Fixed LTO build with Clang if -fgnuc-version=10 or similar
236 was used to make Clang look like GCC >= 10. Now it uses
237 __has_attribute(__symver__) which should be reliable.
241 - --threads=+1 or -T+1 is now a way to put xz into multi-threaded
242 mode while using only one worker thread.
244 - In --lzma2=nice=NUMBER allow 2 and 3 with all match finders
245 now that liblzma handles it.
247 * Updated translations: Chinese (simplified), Korean, and Turkish.
250 5.3.4alpha (2022-11-15)
252 * All fixes from 5.2.7 and 5.2.8.
256 - Minor improvements to the threaded decoder.
258 - Added CRC64 implementation that uses SSSE3, SSE4.1, and CLMUL
259 instructions on 32/64-bit x86 and E2K. On 32-bit x86 it's
260 not enabled unless --disable-assembler is used but then
261 the non-CLMUL code might be slower. Processor support is
262 detected at runtime so this is built by default on x86-64
263 and E2K. On these platforms, if compiler flags indicate
264 unconditional CLMUL support (-msse4.1 -mpclmul) then the
265 generic version is not built, making liblzma 8-9 KiB smaller
266 compared to having both versions included.
268 With extremely compressible files this can make decompression
269 up to twice as fast but with typical files 5 % improvement
270 is a more realistic expectation.
272 The CLMUL version is slower than the generic version with
273 tiny inputs (especially at 1-8 bytes per call, but up to
274 16 bytes). In normal use in xz this doesn't matter at all.
276 - Added an experimental ARM64 filter. This is *not* the final
277 version! Files created with this experimental version won't
278 be supported in the future versions! The filter design is
279 a compromise where improving one use case makes some other
282 - Added decompression support for the .lz (lzip) file format
283 version 0 and the original unextended version 1. See the
284 API docs of lzma_lzip_decoder() for details. Also
285 lzma_auto_decoder() supports .lz files.
287 - Building with --disable-threads --enable-small
288 is now thread-safe if the compiler supports
289 __attribute__((__constructor__))
293 - Added support for OpenBSD's pledge(2) as a sandboxing method.
295 - Don't mention endianness for ARM and ARM-Thumb filters in
296 --long-help. The filters only work for little endian
297 instruction encoding but modern ARM processors using
298 big endian data access still use little endian
299 instruction encoding. So the help text was misleading.
300 In contrast, the PowerPC filter is only for big endian
301 32/64-bit PowerPC code. Little endian PowerPC would need
304 - Added --experimental-arm64. This will be renamed once the
305 filter is finished. Files created with this experimental
306 filter will not be supported in the future!
308 - Added new fields to the output of xz --robot --info-memory.
310 - Added decompression support for the .lz (lzip) file format
311 version 0 and the original unextended version 1. It is
312 autodetected by default. See also the option --format on
315 * Scripts now support the .lz format using xz.
319 - New #defines in config.h: HAVE_ENCODER_ARM64,
320 HAVE_DECODER_ARM64, HAVE_LZIP_DECODER, HAVE_CPUID_H,
321 HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR, HAVE_USABLE_CLMUL
323 - New configure options: --disable-clmul-crc,
324 --disable-microlzma, --disable-lzip-decoder, and
325 'pledge' is now an option in --enable-sandbox (but
326 it's autodetected by default anyway).
328 - INSTALL was updated to document the new configure options.
330 - PACKAGERS now lists also --disable-microlzma and
331 --disable-lzip-decoder as configure options that must
332 not be used in builds for non-embedded use.
336 - Fix some of the tests so that they skip instead of fail if
337 certain features have been disabled with configure options.
338 It's still not perfect.
340 - Other improvements to tests.
342 * Updated translations: Croatian, Finnish, Hungarian, Polish,
343 Romanian, Spanish, Swedish, and Ukrainian.
346 5.3.3alpha (2022-08-22)
348 * All fixes from 5.2.6.
352 - Fixed 32-bit build.
354 - Added threaded .xz decompressor lzma_stream_decoder_mt().
355 It can use multiple threads with .xz files that have multiple
356 Blocks with size information in Block Headers. The threaded
357 encoder in xz has always created such files.
359 Single-threaded encoder cannot store the size information in
360 Block Headers even if one used LZMA_FULL_FLUSH to create
361 multiple Blocks, so this threaded decoder cannot use multiple
362 threads with such files.
364 If there are multiple Streams (concatenated .xz files), one
365 Stream will be decompressed completely before starting the
368 - A new decoder flag LZMA_FAIL_FAST was added. It makes the
369 threaded decompressor report errors soon instead of first
370 flushing all pending data before the error location.
374 - Using -T0 (--threads=0) will now use multi-threaded encoder
375 even on a single-core system. This is to ensure that output
376 from the same xz binary is identical on both single-core and
379 - A default soft memory usage limit is now used for compression
380 when -T0 is used and no explicit limit has been specified.
381 This soft limit is used to restrict the number of threads
382 but if the limit is exceeded with even one thread then xz
383 will continue with one thread using the multi-threaded
384 encoder and this limit is ignored. If the number of threads
385 is specified manually then no default limit will be used;
386 this affects only -T0.
388 This change helps on systems that have very many cores and
389 using all of them for xz makes no sense. Previously xz -T0
390 could run out of memory on such systems because it attempted
391 to reserve memory for too many threads.
393 This also helps with 32-bit builds which don't have a large
394 amount of address space that would be required for many
395 threads. The default limit is 1400 MiB on all 32-bit
398 Now xz -T0 should just work. It might use too few threads
399 in some cases but at least it shouldn't easily run out of
400 memory. It's possible that this will be tweaked before 5.4.0.
402 - Changes to --memlimit-compress and --no-adjust:
404 In single-threaded mode, --memlimit-compress can make xz
405 scale down the LZMA2 dictionary size to meet the memory usage
406 limit. This obviously affects the compressed output. However,
407 if xz was in threaded mode, --memlimit-compress could make xz
408 reduce the number of threads but it wouldn't make xz switch
409 from multi-threaded mode to single-threaded mode or scale
410 down the LZMA2 dictionary size. This seemed illogical.
412 Now --memlimit-compress can make xz switch to single-threaded
413 mode if one thread in multi-threaded mode uses too much
414 memory. If memory usage is still too high, then the LZMA2
415 dictionary size can be scaled down too.
417 The option --no-adjust was also changed so that it no longer
418 prevents xz from scaling down the number of threads as that
419 doesn't affect compressed output (only performance). After
420 this commit --no-adjust only prevents adjustments that affect
421 compressed output, that is, with --no-adjust xz won't switch
422 from multithreaded mode to single-threaded mode and won't
423 scale down the LZMA2 dictionary size.
425 - Added a new option --memlimit-mt-decompress=LIMIT. This is
426 used to limit the number of decompressor threads (possibly
427 falling back to single-threaded mode) but it will never make
428 xz refuse to decompress a file. This has a system-specific
429 default value because without any limit xz could end up
430 allocating memory for the whole compressed input file, the
431 whole uncompressed output file, multiple thread-specific
432 decompressor instances and so on. Basically xz could
433 attempt to use an insane amount of memory even with fairly
436 The new option works together with the existing option
437 --memlimit-decompress=LIMIT. The old option sets a hard limit
438 that must not be exceeded (xz will refuse to decompress)
439 while the new option only restricts the number of threads.
440 If the limit set with --memlimit-mt-decompress is greater
441 than the limit set with --memlimit-compress, then the latter
442 value is used also for --memlimit-mt-decompress.
446 - Added a few more tests.
448 - Added tests/code_coverage.sh to create a code coverage report
453 - Automake's parallel test harness is now used to make tests
456 - Added the CMake files to the distribution tarball. These were
457 supposed to be in 5.2.5 already.
459 - Added liblzma tests to the CMake build.
461 - Windows: Fix building of liblzma.dll with the included
462 Visual Studio project files.
465 5.3.2alpha (2021-10-28)
467 This release was made on short notice so that recent erofs-utils can
468 be built with LZMA support without needing a snapshot from xz.git.
469 Thus many pending things were not included, not even updated
470 translations (which would need to be updated for the new --list
473 * All fixes from 5.2.5.
477 - When copying metadata from the source file to the destination
478 file, don't try to set the group (GID) if it is already set
479 correctly. This avoids a failure on OpenBSD (and possibly on
480 a few other OSes) where files may get created so that their
481 group doesn't belong to the user, and fchown(2) can fail even
482 if it needs to do nothing.
484 - The --keep option now accepts symlinks, hardlinks, and
485 setuid, setgid, and sticky files. Previously this required
488 - Split the long strings used in --list and --info-memory modes
489 to make them much easier for translators.
491 - If built with sandbox support and enabling the sandbox fails,
492 xz will now immediately exit with exit status of 1. Previously
493 it would only display a warning if -vv was used.
495 - Cap --memlimit-compress to 2000 MiB on MIPS32 because on
496 MIPS32 userspace processes are limited to 2 GiB of address
501 - Added lzma_microlzma_encoder() and lzma_microlzma_decoder().
502 The API is in lzma/container.h.
504 The MicroLZMA format is a raw LZMA stream (without end marker)
505 whose first byte (always 0x00) has been replaced with
506 bitwise-negation of the LZMA properties (lc/lp/pb). It was
507 created for use in EROFS but may be used in other contexts
508 as well where it is important to avoid wasting bytes for
509 stream headers or footers. The format is also supported by
512 The MicroLZMA encoder API in liblzma can compress into a
513 fixed-sized output buffer so that as much data is compressed
514 as can be fit into the buffer while still creating a valid
515 MicroLZMA stream. This is needed for EROFS.
517 - Added fuzzing support.
519 - Support Intel Control-flow Enforcement Technology (CET) in
520 32-bit x86 assembly files.
522 - Visual Studio: Use non-standard _MSVC_LANG to detect C++
523 standard version in the lzma.h API header. It's used to
524 detect when "noexcept" can be used.
528 - Fix exit status of xzdiff/xzcmp. Exit status could be 2 when
529 the correct value is 1.
531 - Fix exit status of xzgrep.
533 - Detect corrupt .bz2 files in xzgrep.
535 - Add zstd support to xzgrep and xzdiff/xzcmp.
537 - Fix less(1) version detection in xzless. It failed if the
538 version number from "less -V" contained a dot.
540 * Fix typos and technical issues in man pages.
544 - Windows: Fix building of resource files when config.h isn't
545 used. CMake + Visual Studio can now build liblzma.dll.
547 - Various fixes to the CMake support. It might still need a few
548 more fixes even for liblzma-only builds.
551 5.3.1alpha (2018-04-29)
553 * All fixes from 5.2.4.
555 * Add lzma_file_info_decoder() into liblzma and use it in xz to
556 implement the --list feature.
558 * Capsicum sandbox support is enabled by default where available
564 * xz: Don't modify argv[] when parsing the --memlimit* and
565 --block-list command line options. This fixes confusing
566 arguments in process listing (like "ps auxf").
568 * GNU/Linux only: Use __has_attribute(__symver__) to detect if
569 that attribute is supported. This fixes build on Mandriva where
570 Clang is patched to define __GNUC__ to 11 by default (instead
571 of 4 as used by Clang upstream).
578 - Fixed an infinite loop in LZMA encoder initialization
579 if dict_size >= 2 GiB. (The encoder only supports up
582 - Fixed two cases of invalid free() that can happen if
583 a tiny allocation fails in encoder re-initialization
584 or in lzma_filters_update(). These bugs had some
585 similarities with the bug fixed in 5.2.7.
587 - Fixed lzma_block_encoder() not allowing the use of
588 LZMA_SYNC_FLUSH with lzma_code() even though it was
589 documented to be supported. The sync-flush code in
590 the Block encoder was already used internally via
591 lzma_stream_encoder(), so this was just a missing flag
592 in the lzma_block_encoder() API function.
594 - GNU/Linux only: Don't put symbol versions into static
595 liblzma as it breaks things in some cases (and even if
596 it didn't break anything, symbol versions in static
597 libraries are useless anyway). The downside of the fix
598 is that if the configure options --with-pic or --without-pic
599 are used then it's not possible to build both shared and
600 static liblzma at the same time on GNU/Linux anymore;
601 with those options --disable-static or --disable-shared
604 * New email address for bug reports is <xz@tukaani.org> which
605 forwards messages to Lasse Collin and Jia Tan.
612 - If xz cannot remove an input file when it should, this
613 is now treated as a warning (exit status 2) instead of
614 an error (exit status 1). This matches GNU gzip and it
615 is more logical as at that point the output file has
616 already been successfully closed.
618 - Fix handling of .xz files with an unsupported check type.
619 Previously such printed a warning message but then xz
620 behaved as if an error had occurred (didn't decompress,
621 exit status 1). Now a warning is printed, decompression
622 is done anyway, and exit status is 2. This used to work
623 slightly before 5.0.0. In practice this bug matters only
624 if xz has been built with some check types disabled. As
625 instructed in PACKAGERS, such builds should be done in
626 special situations only.
628 - Fix "xz -dc --single-stream tests/files/good-0-empty.xz"
629 which failed with "Internal error (bug)". That is,
630 --single-stream was broken if the first .xz stream in
631 the input file didn't contain any uncompressed data.
633 - Fix displaying file sizes in the progress indicator when
634 working in passthru mode and there are multiple input files.
635 Just like "gzip -cdf", "xz -cdf" works like "cat" when the
636 input file isn't a supported compressed file format. In
637 this case the file size counters weren't reset between
638 files so with multiple input files the progress indicator
639 displayed an incorrect (too large) value.
643 - API docs in lzma/container.h:
644 * Update the list of decoder flags in the decoder
646 * Explain LZMA_CONCATENATED behavior with .lzma files
647 in lzma_auto_decoder() docs.
649 - OpenBSD: Use HW_NCPUONLINE to detect the number of
650 available hardware threads in lzma_physmem().
652 - Fix use of wrong macro to detect x86 SSE2 support.
653 __SSE2_MATH__ was used with GCC/Clang but the correct
654 one is __SSE2__. The first one means that SSE2 is used
655 for floating point math which is irrelevant here.
656 The affected SSE2 code isn't used on x86-64 so this affects
657 only 32-bit x86 builds that use -msse2 without -mfpmath=sse
658 (there is no runtime detection for SSE2). It improves LZMA
659 compression speed (not decompression).
661 - Fix the build with Intel C compiler 2021 (ICC, not ICX)
662 on Linux. It defines __GNUC__ to 10 but doesn't support
663 the __symver__ attribute introduced in GCC 10.
665 * Scripts: Ignore warnings from xz by using --quiet --no-warn.
666 This is needed if the input .xz files use an unsupported
671 - Updated Croatian and Turkish translations.
673 - One new translations wasn't included because it needed
674 technical fixes. It will be in upcoming 5.4.0. No new
675 translations will be added to the 5.2.x branch anymore.
677 - Renamed the French man page translation file from
678 fr_FR.po to fr.po and thus also its install directory
679 (like /usr/share/man/fr_FR -> .../fr).
681 - Man page translations for upcoming 5.4.0 are now handled
682 in the Translation Project.
684 * Update doc/faq.txt a little so it's less out-of-date.
691 - Made lzma_filters_copy() to never modify the destination
692 array if an error occurs. lzma_stream_encoder() and
693 lzma_stream_encoder_mt() already assumed this. Before this
694 change, if a tiny memory allocation in lzma_filters_copy()
695 failed it would lead to a crash (invalid free() or invalid
696 memory reads) in the cleanup paths of these two encoder
697 initialization functions.
699 - Added missing integer overflow check to lzma_index_append().
700 This affects xz --list and other applications that decode
701 the Index field from .xz files using lzma_index_decoder().
702 Normal decompression of .xz files doesn't call this code
703 and thus most applications using liblzma aren't affected
706 - Single-threaded .xz decoder (lzma_stream_decoder()): If
707 lzma_code() returns LZMA_MEMLIMIT_ERROR it is now possible
708 to use lzma_memlimit_set() to increase the limit and continue
709 decoding. This was supposed to work from the beginning
710 but there was a bug. With other decoders (.lzma or
711 threaded .xz decoder) this already worked correctly.
713 - Fixed accumulation of integrity check type statistics in
714 lzma_index_cat(). This bug made lzma_index_checks() return
715 only the type of the integrity check of the last Stream
716 when multiple lzma_indexes were concatenated. Most
717 applications don't use these APIs but in xz it made
718 xz --list not list all check types from concatenated .xz
719 files. In xz --list --verbose only the per-file "Check:"
720 lines were affected and in xz --robot --list only the "file"
723 - Added ABI compatibility with executables that were linked
724 against liblzma in RHEL/CentOS 7 or other liblzma builds
725 that had copied the problematic patch from RHEL/CentOS 7
726 (xz-5.2.2-compat-libs.patch). For the details, see the
727 comment at the top of src/liblzma/validate_map.sh.
729 WARNING: This uses __symver__ attribute with GCC >= 10.
730 In other cases the traditional __asm__(".symver ...")
731 is used. Using link-time optimization (LTO, -flto) with
732 GCC versions older than 10 can silently result in
733 broken liblzma.so.5 (incorrect symbol versions)! If you
734 want to use -flto with GCC, you must use GCC >= 10.
735 LTO with Clang seems to work even with the traditional
736 __asm__(".symver ...") method.
738 * xzgrep: Fixed compatibility with old shells that break if
739 comments inside command substitutions have apostrophes (').
740 This problem was introduced in 5.2.6.
744 - New #define in config.h: HAVE_SYMBOL_VERSIONS_LINUX
746 - Windows: Fixed liblzma.dll build with Visual Studio project
747 files. It broke in 5.2.6 due to a change that was made to
748 improve CMake support.
750 - Windows: Building liblzma with UNICODE defined should now
753 - CMake files are now actually included in the release tarball.
754 They should have been in 5.2.5 already.
756 - Minor CMake fixes and improvements.
758 * Added a new translation: Turkish
765 - The --keep option now accepts symlinks, hardlinks, and
766 setuid, setgid, and sticky files. Previously this required
769 - When copying metadata from the source file to the destination
770 file, don't try to set the group (GID) if it is already set
771 correctly. This avoids a failure on OpenBSD (and possibly on
772 a few other OSes) where files may get created so that their
773 group doesn't belong to the user, and fchown(2) can fail even
774 if it needs to do nothing.
776 - Cap --memlimit-compress to 2000 MiB instead of 4020 MiB on
777 MIPS32 because on MIPS32 userspace processes are limited
778 to 2 GiB of address space.
782 - Fixed a missing error-check in the threaded encoder. If a
783 small memory allocation fails, a .xz file with an invalid
784 Index field would be created. Decompressing such a file would
785 produce the correct output but result in an error at the end.
786 Thus this is a "mild" data corruption bug. Note that while
787 a failed memory allocation can trigger the bug, it cannot
788 cause invalid memory access.
790 - The decoder for .lzma files now supports files that have
791 uncompressed size stored in the header and still use the
792 end of payload marker (end of stream marker) at the end
793 of the LZMA stream. Such files are rare but, according to
794 the documentation in LZMA SDK, they are valid.
795 doc/lzma-file-format.txt was updated too.
797 - Improved 32-bit x86 assembly files:
798 * Support Intel Control-flow Enforcement Technology (CET)
799 * Use non-executable stack on FreeBSD.
801 - Visual Studio: Use non-standard _MSVC_LANG to detect C++
802 standard version in the lzma.h API header. It's used to
803 detect when "noexcept" can be used.
807 - Fixed arbitrary command injection via a malicious filename
808 (CVE-2022-1271, ZDI-CAN-16587). A standalone patch for
809 this was released to the public on 2022-04-07. A slight
810 robustness improvement has been made since then and, if
811 using GNU or *BSD grep, a new faster method is now used
812 that doesn't use the old sed-based construct at all. This
813 also fixes bad output with GNU grep >= 3.5 (2020-09-27)
814 when xzgrepping binary files.
816 This vulnerability was discovered by:
817 cleemy desu wayo working with Trend Micro Zero Day Initiative
819 - Fixed detection of corrupt .bz2 files.
821 - Improved error handling to fix exit status in some situations
822 and to fix handling of signals: in some situations a signal
823 didn't make xzgrep exit when it clearly should have. It's
824 possible that the signal handling still isn't quite perfect
825 but hopefully it's good enough.
827 - Documented exit statuses on the man page.
829 - xzegrep and xzfgrep now use "grep -E" and "grep -F" instead
830 of the deprecated egrep and fgrep commands.
832 - Fixed parsing of the options -E, -F, -G, -P, and -X. The
833 problem occurred when multiple options were specied in
834 a single argument, for example,
836 echo foo | xzgrep -Fe foo
838 treated foo as a filename because -Fe wasn't correctly
841 - Added zstd support.
845 - Fixed wrong exit status. Exit status could be 2 when the
848 - Documented on the man page that exit status of 2 is used
849 for decompression errors.
851 - Added zstd support.
855 - Fix less(1) version detection. It failed if the version number
856 from "less -V" contained a dot.
860 - Added new translations: Catalan, Croatian, Esperanto,
861 Korean, Portuguese, Romanian, Serbian, Spanish, Swedish,
864 - Updated the Brazilian Portuguese translation.
866 - Added French man page translation. This and the existing
867 German translation aren't complete anymore because the
868 English man pages got a few updates and the translators
869 weren't reached so that they could update their work.
873 - Windows: Fix building of resource files when config.h isn't
874 used. CMake + Visual Studio can now build liblzma.dll.
876 - Various fixes to the CMake support. Building static or shared
877 liblzma should work fine in most cases. In contrast, building
878 the command line tools with CMake is still clearly incomplete
879 and experimental and should be used for testing only.
886 - Fixed several C99/C11 conformance bugs. Now the code is clean
887 under gcc/clang -fsanitize=undefined. Some of these changes
888 might have a negative effect on performance with old GCC
889 versions or compilers other than GCC and Clang. The configure
890 option --enable-unsafe-type-punning can be used to (mostly)
891 restore the old behavior but it shouldn't normally be used.
893 - Improved API documentation of lzma_properties_decode().
895 - Added a very minor encoder speed optimization.
899 - Fixed a crash in "xz -dcfv not_an_xz_file". All four options
900 were required to trigger it. The crash occurred in the
901 progress indicator code when xz was in passthru mode where
904 - Fixed an integer overflow with 32-bit off_t. It could happen
905 when decompressing a file that has a long run of zero bytes
906 which xz would try to write as a sparse file. Since the build
907 system enables large file support by default, off_t is
908 normally 64-bit even on 32-bit systems.
910 - Fixes for --flush-timeout:
911 * Fix semi-busy-waiting.
912 * Avoid unneeded flushes when no new input has arrived
913 since the previous flush was completed.
915 - Added a special case for 32-bit xz: If --memlimit-compress is
916 used to specify a limit that exceeds 4020 MiB, the limit will
917 be set to 4020 MiB. The values "0" and "max" aren't affected
918 by this and neither is decompression. This hack can be
919 helpful when a 32-bit xz has access to 4 GiB address space
920 but the specified memlimit exceeds 4 GiB. This can happen
921 e.g. with some scripts.
923 - Capsicum sandbox is now enabled by default where available
924 (FreeBSD >= 10). The sandbox debug messages (xz -vv) were
925 removed since they seemed to be more annoying than useful.
927 - DOS build now requires DJGPP 2.05 instead of 2.04beta.
928 A workaround for a locale problem with DJGPP 2.05 was added.
930 * xzgrep and other scripts:
932 - Added a configure option --enable-path-for-scripts=PREFIX.
933 It is disabled by default except on Solaris where the default
934 is /usr/xpg4/bin. See INSTALL for details.
936 - Added a workaround for a POSIX shell detection problem on
941 - Added preliminary build instructions for z/OS. See INSTALL
944 - Experimental CMake support was added. It should work to build
945 static liblzma on a few operating systems. It may or may not
946 work to build shared liblzma. On some platforms it can build
947 xz and xzdec too but those are only for testing. See the
948 comment in the beginning of CMakeLists.txt for details.
950 - Visual Studio project files were updated.
951 WindowsTargetPlatformVersion was removed from VS2017 files
952 and set to "10.0" in the added VS2019 files. In the future
953 the VS project files will be removed when CMake support is
956 - New #defines in config.h: HAVE___BUILTIN_ASSUME_ALIGNED,
957 HAVE___BUILTIN_BSWAPXX, and TUKLIB_USE_UNSAFE_TYPE_PUNNING.
959 - autogen.sh has a new optional dependency on po4a and a new
960 option --no-po4a to skip that step. This matters only if one
961 wants to remake the build files. po4a is used to update the
962 translated man pages but as long as the man pages haven't
963 been modified, there's nothing to update and one can use
964 --no-po4a to avoid the dependency on po4a.
968 - XZ Utils translations are now handled by the Translation
969 Project: https://translationproject.org/domain/xz.html
971 - All man pages are now included in German too.
973 - New xz translations: Brazilian Portuguese, Finnish,
974 Hungarian, Chinese (simplified), Chinese (traditional),
975 and Danish (partial translation)
977 - Updated xz translations: French, German, Italian, and Polish
979 - Unfortunately a few new xz translations weren't included due
980 to technical problems like too long lines in --help output or
981 misaligned column headings in tables. In the future, many of
982 these strings will be split and e.g. the table column
983 alignment will be handled in software. This should make the
984 strings easier to translate.
991 - Allow 0 as memory usage limit instead of returning
992 LZMA_PROG_ERROR. Now 0 is treated as if 1 byte was specified,
993 which effectively is the same as 0.
995 - Use "noexcept" keyword instead of "throw()" in the public
996 headers when a C++11 (or newer standard) compiler is used.
998 - Added a portability fix for recent Intel C Compilers.
1000 - Microsoft Visual Studio build files have been moved under
1001 windows/vs2013 and windows/vs2017.
1005 - Fix "xz --list --robot missing_or_bad_file.xz" which would
1006 try to print an uninitialized string and thus produce garbage
1007 output. Since the exit status is non-zero, most uses of such
1008 a command won't try to interpret the garbage output.
1010 - "xz --list foo.xz" could print "Internal error (bug)" in a
1011 corner case where a specific memory usage limit had been set.
1018 - Always close a file before trying to delete it to avoid
1019 problems on some operating system and file system combinations.
1021 - Fixed copying of file timestamps on Windows.
1023 - Added experimental (disabled by default) sandbox support using
1024 Capsicum (FreeBSD >= 10). See --enable-sandbox in INSTALL.
1026 * C99/C11 conformance fixes to liblzma. The issues affected at least
1027 some builds using link-time optimizations.
1029 * Fixed bugs in the rarely-used function lzma_index_dup().
1031 * Use of external SHA-256 code is now disabled by default.
1032 It can still be enabled by passing --enable-external-sha256
1033 to configure. The reasons to disable it by default (see INSTALL
1036 - Some OS-specific SHA-256 implementations conflict with
1037 OpenSSL and cause problems in programs that link against both
1038 liblzma and libcrypto. At least FreeBSD 10 and MINIX 3.3.0
1041 - The internal SHA-256 is faster than the SHA-256 code in
1042 some operating systems.
1044 * Changed CPU core count detection to use sched_getaffinity() on
1045 GNU/Linux and GNU/kFreeBSD.
1047 * Fixes to the build-system and xz to make xz buildable even when
1048 encoders, decoders, or threading have been disabled from libilzma
1049 using configure options. These fixes added two new #defines to
1050 config.h: HAVE_ENCODERS and HAVE_DECODERS.
1055 * Fixed bugs in QNX-specific code.
1057 * Omitted the use of pipe2() even if it is available to avoid
1058 portability issues with some old Linux and glibc combinations.
1060 * Updated German translation.
1062 * Added project files to build static and shared liblzma (not the
1063 whole XZ Utils) with Visual Studio 2013 update 2 or later.
1065 * Documented that threaded decompression hasn't been implemented
1066 yet. A 5.2.0 NEWS entry describing multi-threading support had
1067 incorrectly said "decompression" when it should have said
1073 * Fixed a compression-ratio regression in fast mode of LZMA1 and
1074 LZMA2. The bug is present in 5.1.4beta and 5.2.0 releases.
1076 * Fixed a portability problem in xz that affected at least OpenBSD.
1078 * Fixed xzdiff to be compatible with FreeBSD's mktemp which differs
1079 from most other mktemp implementations.
1081 * Changed CPU core count detection to use cpuset_getaffinity() on
1089 * All fixes from 5.0.8
1091 * liblzma: Fixed lzma_stream_encoder_mt_memusage() when a preset
1094 * xzdiff: If mktemp isn't installed, mkdir will be used as
1095 a fallback to create a temporary directory. Installing mktemp
1096 is still recommended.
1098 * Updated French, German, Italian, Polish, and Vietnamese
1101 Summary of fixes and new features added in the 5.1.x development
1106 - Added support for multi-threaded compression. See the
1107 lzma_mt structure, lzma_stream_encoder_mt(), and
1108 lzma_stream_encoder_mt_memusage() in <lzma/container.h>,
1109 lzma_get_progress() in <lzma/base.h>, and lzma_cputhreads()
1110 in <lzma/hardware.h> for details.
1112 - Made the uses of lzma_allocator const correct.
1114 - Added lzma_block_uncomp_encode() to create uncompressed
1115 .xz Blocks using LZMA2 uncompressed chunks.
1117 - Added support for LZMA_IGNORE_CHECK.
1119 - A few speed optimizations were made.
1121 - Added support for symbol versioning. It is enabled by default
1122 on GNU/Linux, other GNU-based systems, and FreeBSD.
1124 - liblzma (not the whole XZ Utils) should now be buildable
1125 with MSVC 2013 update 2 or later using windows/config.h.
1129 - Fixed a race condition in the signal handling. It was
1130 possible that e.g. the first SIGINT didn't make xz exit
1131 if reading or writing blocked and one had bad luck. The fix
1132 is non-trivial, so as of writing it is unknown if it will be
1133 backported to the v5.0 branch.
1135 - Multi-threaded compression can be enabled with the
1136 --threads (-T) option.
1137 [Fixed: This originally said "decompression".]
1139 - New command line options in xz: --single-stream,
1140 --block-size=SIZE, --block-list=SIZES,
1141 --flush-timeout=TIMEOUT, and --ignore-check.
1143 - xz -lvv now shows the minimum xz version that is required to
1144 decompress the file. Currently it is 5.0.0 for all supported
1145 .xz files except files with empty LZMA2 streams require 5.0.2.
1147 * xzdiff and xzgrep now support .lzo files if lzop is installed.
1148 The .tzo suffix is also recognized as a shorthand for .tar.lzo.
1151 5.1.4beta (2014-09-14)
1153 * All fixes from 5.0.6
1155 * liblzma: Fixed the use of presets in threaded encoder
1158 * xz --block-list and --block-size can now be used together
1159 in single-threaded mode. Previously the combination only
1160 worked in multi-threaded mode.
1162 * Added support for LZMA_IGNORE_CHECK to liblzma and made it
1163 available in xz as --ignore-check.
1165 * liblzma speed optimizations:
1167 - Initialization of a new LZMA1 or LZMA2 encoder has been
1168 optimized. (The speed of reinitializing an already-allocated
1169 encoder isn't affected.) This helps when compressing many
1170 small buffers with lzma_stream_buffer_encode() and other
1171 similar situations where an already-allocated encoder state
1172 isn't reused. This speed-up is visible in xz too if one
1173 compresses many small files one at a time instead running xz
1174 once and giving all files as command-line arguments.
1176 - Buffer comparisons are now much faster when unaligned access
1177 is allowed (configured with --enable-unaligned-access). This
1178 speeds up encoding significantly. There is arch-specific code
1179 for 32-bit and 64-bit x86 (32-bit needs SSE2 for the best
1180 results and there's no run-time CPU detection for now).
1181 For other archs there is only generic code which probably
1182 isn't as optimal as arch-specific solutions could be.
1184 - A few speed optimizations were made to the SHA-256 code.
1185 (Note that the builtin SHA-256 code isn't used on all
1188 * liblzma can now be built with MSVC 2013 update 2 or later
1189 using windows/config.h.
1191 * Vietnamese translation was added.
1194 5.1.3alpha (2013-10-26)
1196 * All fixes from 5.0.5
1200 - Fixed a deadlock in the threaded encoder.
1202 - Made the uses of lzma_allocator const correct.
1204 - Added lzma_block_uncomp_encode() to create uncompressed
1205 .xz Blocks using LZMA2 uncompressed chunks.
1207 - Added support for native threads on Windows and the ability
1208 to detect the number of CPU cores.
1212 - Fixed a race condition in the signal handling. It was
1213 possible that e.g. the first SIGINT didn't make xz exit
1214 if reading or writing blocked and one had bad luck. The fix
1215 is non-trivial, so as of writing it is unknown if it will be
1216 backported to the v5.0 branch.
1218 - Made the progress indicator work correctly in threaded mode.
1220 - Threaded encoder now works together with --block-list=SIZES.
1222 - Added preliminary support for --flush-timeout=TIMEOUT.
1223 It can be useful for (somewhat) real-time streaming. For
1224 now the decompression side has to be done with something
1225 else than the xz tool due to how xz does buffering, but this
1229 5.1.2alpha (2012-07-04)
1231 * All fixes from 5.0.3 and 5.0.4
1235 - Fixed a deadlock and an invalid free() in the threaded encoder.
1237 - Added support for symbol versioning. It is enabled by default
1238 on GNU/Linux, other GNU-based systems, and FreeBSD.
1240 - Use SHA-256 implementation from the operating system if one is
1241 available in libc, libmd, or libutil. liblzma won't use e.g.
1242 OpenSSL or libgcrypt to avoid introducing new dependencies.
1244 - Fixed liblzma.pc for static linking.
1246 - Fixed a few portability bugs.
1248 * xz --decompress --single-stream now fixes the input position after
1249 successful decompression. Now the following works:
1251 echo foo | xz > foo.xz
1252 echo bar | xz >> foo.xz
1253 ( xz -dc --single-stream ; xz -dc --single-stream ) < foo.xz
1255 Note that it doesn't work if the input is not seekable
1256 or if there is Stream Padding between the concatenated
1259 * xz -lvv now shows the minimum xz version that is required to
1260 decompress the file. Currently it is 5.0.0 for all supported .xz
1261 files except files with empty LZMA2 streams require 5.0.2.
1263 * Added an *incomplete* implementation of --block-list=SIZES to xz.
1264 It only works correctly in single-threaded mode and when
1265 --block-size isn't used at the same time. --block-list allows
1266 specifying the sizes of Blocks which can be useful e.g. when
1267 creating files for random-access reading.
1270 5.1.1alpha (2011-04-12)
1272 * All fixes from 5.0.2
1274 * liblzma fixes that will also be included in 5.0.3:
1276 - A memory leak was fixed.
1278 - lzma_stream_buffer_encode() no longer creates an empty .xz
1279 Block if encoding an empty buffer. Such an empty Block with
1280 LZMA2 data would trigger a bug in 5.0.1 and older (see the
1281 first bullet point in 5.0.2 notes). When releasing 5.0.2,
1282 I thought that no encoder creates this kind of files but
1285 - Validate function arguments better in a few functions. Most
1286 importantly, specifying an unsupported integrity check to
1287 lzma_stream_buffer_encode() no longer creates a corrupt .xz
1288 file. Probably no application tries to do that, so this
1289 shouldn't be a big problem in practice.
1291 - Document that lzma_block_buffer_encode(),
1292 lzma_easy_buffer_encode(), lzma_stream_encoder(), and
1293 lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK.
1295 - The return values of the _memusage() functions are now
1298 * Support for multithreaded compression was added using the simplest
1299 method, which splits the input data into blocks and compresses
1300 them independently. Other methods will be added in the future.
1301 The current method has room for improvement, e.g. it is possible
1302 to reduce the memory usage.
1304 * Added the options --single-stream and --block-size=SIZE to xz.
1306 * xzdiff and xzgrep now support .lzo files if lzop is installed.
1307 The .tzo suffix is also recognized as a shorthand for .tar.lzo.
1309 * Support for short 8.3 filenames under DOS was added to xz. It is
1310 experimental and may change before it gets into a stable release.
1315 * Fixed an old bug in xzgrep that affected OpenBSD and probably
1316 a few other operating systems too.
1318 * Updated French and German translations.
1320 * Added support for detecting the amount of RAM on AmigaOS/AROS.
1322 * Minor build system updates.
1327 * Fix regressions introduced in 5.0.6:
1329 - Fix building with non-GNU make.
1331 - Fix invalid Libs.private value in liblzma.pc which broke
1332 static linking against liblzma if the linker flags were
1333 taken from pkg-config.
1338 * xzgrep now exits with status 0 if at least one file matched.
1340 * A few minor portability and build system fixes
1345 * lzmadec and liblzma's lzma_alone_decoder(): Support decompressing
1346 .lzma files that have less common settings in the headers
1347 (dictionary size other than 2^n or 2^n + 2^(n-1), or uncompressed
1348 size greater than 256 GiB). The limitations existed to avoid false
1349 positives when detecting .lzma files. The lc + lp <= 4 limitation
1350 still remains since liblzma's LZMA decoder has that limitation.
1352 NOTE: xz's .lzma support or liblzma's lzma_auto_decoder() are NOT
1353 affected by this change. They still consider uncommon .lzma headers
1354 as not being in the .lzma format. Changing this would give way too
1355 many false positives.
1359 - Interaction of preset and custom filter chain options was
1360 made less illogical. This affects only certain less typical
1361 uses cases so few people are expected to notice this change.
1363 Now when a custom filter chain option (e.g. --lzma2) is
1364 specified, all preset options (-0 ... -9, -e) earlier are on
1365 the command line are completely forgotten. Similarly, when
1366 a preset option is specified, all custom filter chain options
1367 earlier on the command line are completely forgotten.
1369 Example 1: "xz -9 --lzma2=preset=5 -e" is equivalent to "xz -e"
1370 which is equivalent to "xz -6e". Earlier -e didn't put xz back
1371 into preset mode and thus the example command was equivalent
1372 to "xz --lzma2=preset=5".
1374 Example 2: "xz -9e --lzma2=preset=5 -7" is equivalent to
1375 "xz -7". Earlier a custom filter chain option didn't make
1376 xz forget the -e option so the example was equivalent to
1379 - Fixes and improvements to error handling.
1381 - Various fixes to the man page.
1383 * xzless: Fixed to work with "less" versions 448 and later.
1385 * xzgrep: Made -h an alias for --no-filename.
1387 * Include the previously missing debug/translation.bash which can
1388 be useful for translators.
1390 * Include a build script for Mac OS X. This has been in the Git
1391 repository since 2010 but due to a mistake in Makefile.am the
1392 script hasn't been included in a release tarball before.
1399 - Fix lzma_index_init(). It could crash if memory allocation
1402 - Fix the possibility of an incorrect LZMA_BUF_ERROR when a BCJ
1403 filter is used and the application only provides exactly as
1404 much output space as is the uncompressed size of the file.
1406 - Fix a bug in doc/examples_old/xz_pipe_decompress.c. It didn't
1407 check if the last call to lzma_code() really returned
1408 LZMA_STREAM_END, which made the program think that truncated
1411 - New example programs in doc/examples (old programs are now in
1412 doc/examples_old). These have more comments and more detailed
1415 * Fix "xz -lvv foo.xz". It could crash on some corrupted files.
1417 * Fix output of "xz --robot -lv" and "xz --robot -lvv" which
1418 incorrectly printed the filename also in the "foo (x/x)" format.
1420 * Fix exit status of "xzdiff foo.xz bar.xz".
1422 * Fix exit status of "xzgrep foo binary_file".
1424 * Fix portability to EBCDIC systems.
1426 * Fix a configure issue on AIX with the XL C compiler. See INSTALL
1429 * Update French, German, Italian, and Polish translations.
1436 - A memory leak was fixed.
1438 - lzma_stream_buffer_encode() no longer creates an empty .xz
1439 Block if encoding an empty buffer. Such an empty Block with
1440 LZMA2 data would trigger a bug in 5.0.1 and older (see the
1441 first bullet point in 5.0.2 notes). When releasing 5.0.2,
1442 I thought that no encoder creates this kind of files but
1445 - Validate function arguments better in a few functions. Most
1446 importantly, specifying an unsupported integrity check to
1447 lzma_stream_buffer_encode() no longer creates a corrupt .xz
1448 file. Probably no application tries to do that, so this
1449 shouldn't be a big problem in practice.
1451 - Document that lzma_block_buffer_encode(),
1452 lzma_easy_buffer_encode(), lzma_stream_encoder(), and
1453 lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK.
1455 - The return values of the _memusage() functions are now
1458 * Fix command name detection in xzgrep. xzegrep and xzfgrep now
1459 correctly use egrep and fgrep instead of grep.
1461 * French translation was added.
1466 * LZMA2 decompressor now correctly accepts LZMA2 streams with no
1467 uncompressed data. Previously it considered them corrupt. The
1468 bug can affect applications that use raw LZMA2 streams. It is
1469 very unlikely to affect .xz files because no compressor creates
1470 .xz files with empty LZMA2 streams. (Empty .xz files are a
1471 different thing than empty LZMA2 streams.)
1473 * "xz --suffix=.foo filename.foo" now refuses to compress the
1474 file due to it already having the suffix .foo. It was already
1475 documented on the man page, but the code lacked the test.
1477 * "xzgrep -l foo bar.xz" works now.
1479 * Polish translation was added.
1484 * xz --force now (de)compresses files that have setuid, setgid,
1485 or sticky bit set and files that have multiple hard links.
1486 The man page had it documented this way already, but the code
1489 * gzip and bzip2 support in xzdiff was fixed.
1493 * Minor fix to Czech translation
1498 Only the most important changes compared to 4.999.9beta are listed
1499 here. One change is especially important:
1501 * The memory usage limit is now disabled by default. Some scripts
1502 written before this change may have used --memory=max on xz command
1503 line or in XZ_OPT. THESE USES OF --memory=max SHOULD BE REMOVED
1504 NOW, because they interfere with user's ability to set the memory
1505 usage limit himself. If user-specified limit causes problems to
1506 your script, blame the user.
1508 Other significant changes:
1510 * Added support for XZ_DEFAULTS environment variable. This variable
1511 allows users to set default options for xz, e.g. default memory
1512 usage limit or default compression level. Scripts that use xz
1513 must never set or unset XZ_DEFAULTS. Scripts should use XZ_OPT
1514 instead if they need a way to pass options to xz via an
1515 environment variable.
1517 * The compression settings associated with the preset levels
1518 -0 ... -9 have been changed. --extreme was changed a little too.
1519 It is now less likely to make compression worse, but with some
1520 files the new --extreme may compress slightly worse than the old
1523 * If a preset level (-0 ... -9) is specified after a custom filter
1524 chain options have been used (e.g. --lzma2), the custom filter
1525 chain will be forgotten. Earlier the preset options were
1526 completely ignored after custom filter chain options had been
1529 * xz will create sparse files when decompressing if the uncompressed
1530 data contains long sequences of binary zeros. This is done even
1531 when writing to standard output that is connected to a regular
1532 file and certain additional conditions are met to make it safe.
1534 * Support for "xz --list" was added. Combine with --verbose or
1535 --verbose --verbose (-vv) for detailed output.
1537 * I had hoped that liblzma API would have been stable after
1538 4.999.9beta, but there have been a couple of changes in the
1539 advanced features, which don't affect most applications:
1541 - Index handling code was revised. If you were using the old
1542 API, you will get a compiler error (so it's easy to notice).
1544 - A subtle but important change was made to the Block handling
1545 API. lzma_block.version has to be initialized even for
1546 lzma_block_header_decode(). Code that doesn't do it will work
1547 for now, but might break in the future, which makes this API
1548 change easy to miss.
1550 * The major soname has been bumped to 5.0.0. liblzma API and ABI
1551 are now stable, so the need to recompile programs linking against
1552 liblzma shouldn't arise soon.