Translations: Update the German man page translations.
[xz.git] / NEWS
blob0196e9433f33c45d1b20b4770b8ff59c55aeeaf2
2 XZ Utils Release Notes
3 ======================
5 5.3.5beta (2022-12-01)
7     * All fixes from 5.2.9.
9     * liblzma:
11         - Added new LZMA_FILTER_LZMA1EXT for raw encoder and decoder to
12           handle raw LZMA1 streams that don't have end of payload marker
13           (EOPM) alias end of stream (EOS) marker. It can be used in
14           filter chains, for example, with the x86 BCJ filter.
16         - Added lzma_str_to_filters(), lzma_str_from_filters(), and
17           lzma_str_list_filters() to make it easier for applications
18           to get custom compression options from a user and convert
19           it to an array of lzma_filter structures.
21         - Added lzma_filters_free().
23         - lzma_filters_update() can now be used with the multi-threaded
24           encoder (lzma_stream_encoder_mt()) to change the filter chain
25           after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH.
27         - In lzma_options_lzma, allow nice_len = 2 and 3 with the match
28           finders that require at least 3 or 4. Now it is internally
29           rounded up if needed.
31         - ARM64 filter was modified. It is still experimental.
33         - Fixed LTO build with Clang if -fgnuc-version=10 or similar
34           was used to make Clang look like GCC >= 10. Now it uses
35           __has_attribute(__symver__) which should be reliable.
37     * xz:
39         - --threads=+1 or -T+1 is now a way to put xz into multi-threaded
40           mode while using only one worker thread.
42         - In --lzma2=nice=NUMBER allow 2 and 3 with all match finders
43           now that liblzma handles it.
45     * Updated translations: Chinese (simplified), Korean, and Turkish.
48 5.3.4alpha (2022-11-15)
50     * All fixes from 5.2.7 and 5.2.8.
52     * liblzma:
54         - Minor improvements to the threaded decoder.
56         - Added CRC64 implementation that uses SSSE3, SSE4.1, and CLMUL
57           instructions on 32/64-bit x86 and E2K. On 32-bit x86 it's
58           not enabled unless --disable-assembler is used but then
59           the non-CLMUL code might be slower. Processor support is
60           detected at runtime so this is built by default on x86-64
61           and E2K. On these platforms, if compiler flags indicate
62           unconditional CLMUL support (-msse4.1 -mpclmul) then the
63           generic version is not built, making liblzma 8-9 KiB smaller
64           compared to having both versions included.
66           With extremely compressible files this can make decompression
67           up to twice as fast but with typical files 5 % improvement
68           is a more realistic expectation.
70           The CLMUL version is slower than the generic version with
71           tiny inputs (especially at 1-8 bytes per call, but up to
72           16 bytes). In normal use in xz this doesn't matter at all.
74         - Added an experimental ARM64 filter. This is *not* the final
75           version! Files created with this experimental version won't
76           be supported in the future versions! The filter design is
77           a compromise where improving one use case makes some other
78           cases worse.
80         - Added decompression support for the .lz (lzip) file format
81           version 0 and the original unextended version 1. See the
82           API docs of lzma_lzip_decoder() for details. Also
83           lzma_auto_decoder() supports .lz files.
85         - Building with --disable-threads --enable-small
86           is now thread-safe if the compiler supports
87           __attribute__((__constructor__))
89     * xz:
91         - Added support for OpenBSD's pledge(2) as a sandboxing method.
93         - Don't mention endianness for ARM and ARM-Thumb filters in
94           --long-help. The filters only work for little endian
95           instruction encoding but modern ARM processors using
96           big endian data access still use little endian
97           instruction encoding. So the help text was misleading.
98           In contrast, the PowerPC filter is only for big endian
99           32/64-bit PowerPC code. Little endian PowerPC would need
100           a separate filter.
102         - Added --experimental-arm64. This will be renamed once the
103           filter is finished. Files created with this experimental
104           filter will not be supported in the future!
106         - Added new fields to the output of xz --robot --info-memory.
108         - Added decompression support for the .lz (lzip) file format
109           version 0 and the original unextended version 1. It is
110           autodetected by default. See also the option --format on
111           the xz man page.
113     * Scripts now support the .lz format using xz.
115     * Build systems:
117         - New #defines in config.h: HAVE_ENCODER_ARM64,
118           HAVE_DECODER_ARM64, HAVE_LZIP_DECODER, HAVE_CPUID_H,
119           HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR, HAVE_USABLE_CLMUL
121         - New configure options: --disable-clmul-crc,
122           --disable-microlzma, --disable-lzip-decoder, and
123           'pledge' is now an option in --enable-sandbox (but
124           it's autodetected by default anyway).
126         - INSTALL was updated to document the new configure options.
128         - PACKAGERS now lists also --disable-microlzma and
129           --disable-lzip-decoder as configure options that must
130           not be used in builds for non-embedded use.
132     * Tests:
134         - Fix some of the tests so that they skip instead of fail if
135           certain features have been disabled with configure options.
136           It's still not perfect.
138         - Other improvements to tests.
140     * Updated translations: Croatian, Finnish, Hungarian, Polish,
141       Romanian, Spanish, Swedish, and Ukrainian.
144 5.3.3alpha (2022-08-22)
146     * All fixes from 5.2.6.
148     * liblzma:
150         - Fixed 32-bit build.
152         - Added threaded .xz decompressor lzma_stream_decoder_mt().
153           It can use multiple threads with .xz files that have multiple
154           Blocks with size information in Block Headers. The threaded
155           encoder in xz has always created such files.
157           Single-threaded encoder cannot store the size information in
158           Block Headers even if one used LZMA_FULL_FLUSH to create
159           multiple Blocks, so this threaded decoder cannot use multiple
160           threads with such files.
162           If there are multiple Streams (concatenated .xz files), one
163           Stream will be decompressed completely before starting the
164           next Stream.
166         - A new decoder flag LZMA_FAIL_FAST was added. It makes the
167           threaded decompressor report errors soon instead of first
168           flushing all pending data before the error location.
170     * xz:
172         - Using -T0 (--threads=0) will now use multi-threaded encoder
173           even on a single-core system. This is to ensure that output
174           from the same xz binary is identical on both single-core and
175           multi-core systems.
177         - A default soft memory usage limit is now used for compression
178           when -T0 is used and no explicit limit has been specified.
179           This soft limit is used to restrict the number of threads
180           but if the limit is exceeded with even one thread then xz
181           will continue with one thread using the multi-threaded
182           encoder and this limit is ignored. If the number of threads
183           is specified manually then no default limit will be used;
184           this affects only -T0.
186           This change helps on systems that have very many cores and
187           using all of them for xz makes no sense. Previously xz -T0
188           could run out of memory on such systems because it attempted
189           to reserve memory for too many threads.
191           This also helps with 32-bit builds which don't have a large
192           amount of address space that would be required for many
193           threads. The default limit is 1400 MiB on all 32-bit
194           platforms with -T0.
196           Now xz -T0 should just work. It might use too few threads
197           in some cases but at least it shouldn't easily run out of
198           memory. It's possible that this will be tweaked before 5.4.0.
200         - Changes to --memlimit-compress and --no-adjust:
202           In single-threaded mode, --memlimit-compress can make xz
203           scale down the LZMA2 dictionary size to meet the memory usage
204           limit. This obviously affects the compressed output. However,
205           if xz was in threaded mode, --memlimit-compress could make xz
206           reduce the number of threads but it wouldn't make xz switch
207           from multi-threaded mode to single-threaded mode or scale
208           down the LZMA2 dictionary size. This seemed illogical.
210           Now --memlimit-compress can make xz switch to single-threaded
211           mode if one thread in multi-threaded mode uses too much
212           memory. If memory usage is still too high, then the LZMA2
213           dictionary size can be scaled down too.
215           The option --no-adjust was also changed so that it no longer
216           prevents xz from scaling down the number of threads as that
217           doesn't affect compressed output (only performance). After
218           this commit --no-adjust only prevents adjustments that affect
219           compressed output, that is, with --no-adjust xz won't switch
220           from multithreaded mode to single-threaded mode and won't
221           scale down the LZMA2 dictionary size.
223         - Added a new option --memlimit-decompress-mt=LIMIT. This is
224           used to limit the number of decompressor threads (possibly
225           falling back to single-threaded mode) but it will never make
226           xz refuse to decompress a file. This has a system-specific
227           default value because without any limit xz could end up
228           allocating memory for the whole compressed input file, the
229           whole uncompressed output file, multiple thread-specific
230           decompressor instances and so on. Basically xz could
231           attempt to use an insane amount of memory even with fairly
232           common files.
234           The new option works together with the existing option
235           --memlimit-decompress=LIMIT. The old option sets a hard limit
236           that must not be exceeded (xz will refuse to decompress)
237           while the new option only restricts the number of threads.
238           If the limit set with --memlimit-mt-decompress is greater
239           than the limit set with --memlimit-compress, then the latter
240           value is used also for --memlimit-mt-decompress.
242     * Tests:
244         - Added a few more tests.
246         - Added tests/code_coverage.sh to create a code coverage report
247           of the tests.
249     * Build systems:
251         - Automake's parallel test harness is now used to make tests
252           finish faster.
254         - Added the CMake files to the distribution tarball. These were
255           supposed to be in 5.2.5 already.
257         - Added liblzma tests to the CMake build.
259         - Windows: Fix building of liblzma.dll with the included
260           Visual Studio project files.
263 5.3.2alpha (2021-10-28)
265     This release was made on short notice so that recent erofs-utils can
266     be built with LZMA support without needing a snapshot from xz.git.
267     Thus many pending things were not included, not even updated
268     translations (which would need to be updated for the new --list
269     strings anyway).
271     * All fixes from 5.2.5.
273     * xz:
275         - When copying metadata from the source file to the destination
276           file, don't try to set the group (GID) if it is already set
277           correctly. This avoids a failure on OpenBSD (and possibly on
278           a few other OSes) where files may get created so that their
279           group doesn't belong to the user, and fchown(2) can fail even
280           if it needs to do nothing.
282         - The --keep option now accepts symlinks, hardlinks, and
283           setuid, setgid, and sticky files. Previously this required
284           using --force.
286         - Split the long strings used in --list and --info-memory modes
287           to make them much easier for translators.
289         - If built with sandbox support and enabling the sandbox fails,
290           xz will now immediately exit with exit status of 1. Previously
291           it would only display a warning if -vv was used.
293         - Cap --memlimit-compress to 2000 MiB on MIPS32 because on
294           MIPS32 userspace processes are limited to 2 GiB of address
295           space.
297     * liblzma:
299         - Added lzma_microlzma_encoder() and lzma_microlzma_decoder().
300           The API is in lzma/container.h.
302           The MicroLZMA format is a raw LZMA stream (without end marker)
303           whose first byte (always 0x00) has been replaced with
304           bitwise-negation of the LZMA properties (lc/lp/pb). It was
305           created for use in EROFS but may be used in other contexts
306           as well where it is important to avoid wasting bytes for
307           stream headers or footers. The format is also supported by
308           XZ Embedded.
310           The MicroLZMA encoder API in liblzma can compress into a
311           fixed-sized output buffer so that as much data is compressed
312           as can be fit into the buffer while still creating a valid
313           MicroLZMA stream. This is needed for EROFS.
315         - Added fuzzing support.
317         - Support Intel Control-flow Enforcement Technology (CET) in
318           32-bit x86 assembly files.
320         - Visual Studio: Use non-standard _MSVC_LANG to detect C++
321           standard version in the lzma.h API header. It's used to
322           detect when "noexcept" can be used.
324     * Scripts:
326         - Fix exit status of xzdiff/xzcmp. Exit status could be 2 when
327           the correct value is 1.
329         - Fix exit status of xzgrep.
331         - Detect corrupt .bz2 files in xzgrep.
333         - Add zstd support to xzgrep and xzdiff/xzcmp.
335         - Fix less(1) version detection in xzless. It failed if the
336           version number from "less -V" contained a dot.
338     * Fix typos and technical issues in man pages.
340     * Build systems:
342         - Windows: Fix building of resource files when config.h isn't
343           used. CMake + Visual Studio can now build liblzma.dll.
345         - Various fixes to the CMake support. It might still need a few
346           more fixes even for liblzma-only builds.
349 5.3.1alpha (2018-04-29)
351     * All fixes from 5.2.4.
353     * Add lzma_file_info_decoder() into liblzma and use it in xz to
354       implement the --list feature.
356     * Capsicum sandbox support is enabled by default where available
357       (FreeBSD >= 10).
360 5.2.9 (2022-11-30)
362     * liblzma:
364         - Fixed an infinite loop in LZMA encoder initialization
365           if dict_size >= 2 GiB. (The encoder only supports up
366           to 1536 MiB.)
368         - Fixed two cases of invalid free() that can happen if
369           a tiny allocation fails in encoder re-initialization
370           or in lzma_filters_update(). These bugs had some
371           similarities with the bug fixed in 5.2.7.
373         - Fixed lzma_block_encoder() not allowing the use of
374           LZMA_SYNC_FLUSH with lzma_code() even though it was
375           documented to be supported. The sync-flush code in
376           the Block encoder was already used internally via
377           lzma_stream_encoder(), so this was just a missing flag
378           in the lzma_block_encoder() API function.
380         - GNU/Linux only: Don't put symbol versions into static
381           liblzma as it breaks things in some cases (and even if
382           it didn't break anything, symbol versions in static
383           libraries are useless anyway). The downside of the fix
384           is that if the configure options --with-pic or --without-pic
385           are used then it's not possible to build both shared and
386           static liblzma at the same time on GNU/Linux anymore;
387           with those options --disable-static or --disable-shared
388           must be used too.
390     * New email address for bug reports is <xz@tukaani.org> which
391       forwards messages to Lasse Collin and Jia Tan.
394 5.2.8 (2022-11-13)
396     * xz:
398         - If xz cannot remove an input file when it should, this
399           is now treated as a warning (exit status 2) instead of
400           an error (exit status 1). This matches GNU gzip and it
401           is more logical as at that point the output file has
402           already been successfully closed.
404         - Fix handling of .xz files with an unsupported check type.
405           Previously such printed a warning message but then xz
406           behaved as if an error had occurred (didn't decompress,
407           exit status 1). Now a warning is printed, decompression
408           is done anyway, and exit status is 2. This used to work
409           slightly before 5.0.0. In practice this bug matters only
410           if xz has been built with some check types disabled. As
411           instructed in PACKAGERS, such builds should be done in
412           special situations only.
414         - Fix "xz -dc --single-stream tests/files/good-0-empty.xz"
415           which failed with "Internal error (bug)". That is,
416           --single-stream was broken if the first .xz stream in
417           the input file didn't contain any uncompressed data.
419         - Fix displaying file sizes in the progress indicator when
420           working in passthru mode and there are multiple input files.
421           Just like "gzip -cdf", "xz -cdf" works like "cat" when the
422           input file isn't a supported compressed file format. In
423           this case the file size counters weren't reset between
424           files so with multiple input files the progress indicator
425           displayed an incorrect (too large) value.
427     * liblzma:
429         - API docs in lzma/container.h:
430             * Update the list of decoder flags in the decoder
431               function docs.
432             * Explain LZMA_CONCATENATED behavior with .lzma files
433               in lzma_auto_decoder() docs.
435         - OpenBSD: Use HW_NCPUONLINE to detect the number of
436           available hardware threads in lzma_physmem().
438         - Fix use of wrong macro to detect x86 SSE2 support.
439           __SSE2_MATH__ was used with GCC/Clang but the correct
440           one is __SSE2__. The first one means that SSE2 is used
441           for floating point math which is irrelevant here.
442           The affected SSE2 code isn't used on x86-64 so this affects
443           only 32-bit x86 builds that use -msse2 without -mfpmath=sse
444           (there is no runtime detection for SSE2). It improves LZMA
445           compression speed (not decompression).
447         - Fix the build with Intel C compiler 2021 (ICC, not ICX)
448           on Linux. It defines __GNUC__ to 10 but doesn't support
449           the __symver__ attribute introduced in GCC 10.
451     * Scripts: Ignore warnings from xz by using --quiet --no-warn.
452       This is needed if the input .xz files use an unsupported
453       check type.
455     * Translations:
457         - Updated Croatian and Turkish translations.
459         - One new translations wasn't included because it needed
460           technical fixes. It will be in upcoming 5.4.0. No new
461           translations will be added to the 5.2.x branch anymore.
463         - Renamed the French man page translation file from
464           fr_FR.po to fr.po and thus also its install directory
465           (like /usr/share/man/fr_FR -> .../fr).
467         - Man page translations for upcoming 5.4.0 are now handled
468           in the Translation Project.
470     * Update doc/faq.txt a little so it's less out-of-date.
473 5.2.7 (2022-09-30)
475     * liblzma:
477         - Made lzma_filters_copy() to never modify the destination
478           array if an error occurs. lzma_stream_encoder() and
479           lzma_stream_encoder_mt() already assumed this. Before this
480           change, if a tiny memory allocation in lzma_filters_copy()
481           failed it would lead to a crash (invalid free() or invalid
482           memory reads) in the cleanup paths of these two encoder
483           initialization functions.
485         - Added missing integer overflow check to lzma_index_append().
486           This affects xz --list and other applications that decode
487           the Index field from .xz files using lzma_index_decoder().
488           Normal decompression of .xz files doesn't call this code
489           and thus most applications using liblzma aren't affected
490           by this bug.
492         - Single-threaded .xz decoder (lzma_stream_decoder()): If
493           lzma_code() returns LZMA_MEMLIMIT_ERROR it is now possible
494           to use lzma_memlimit_set() to increase the limit and continue
495           decoding. This was supposed to work from the beginning
496           but there was a bug. With other decoders (.lzma or
497           threaded .xz decoder) this already worked correctly.
499         - Fixed accumulation of integrity check type statistics in
500           lzma_index_cat(). This bug made lzma_index_checks() return
501           only the type of the integrity check of the last Stream
502           when multiple lzma_indexes were concatenated. Most
503           applications don't use these APIs but in xz it made
504           xz --list not list all check types from concatenated .xz
505           files. In xz --list --verbose only the per-file "Check:"
506           lines were affected and in xz --robot --list only the "file"
507           line was affected.
509         - Added ABI compatibility with executables that were linked
510           against liblzma in RHEL/CentOS 7 or other liblzma builds
511           that had copied the problematic patch from RHEL/CentOS 7
512           (xz-5.2.2-compat-libs.patch). For the details, see the
513           comment at the top of src/liblzma/validate_map.sh.
515           WARNING: This uses __symver__ attribute with GCC >= 10.
516           In other cases the traditional __asm__(".symver ...")
517           is used. Using link-time optimization (LTO, -flto) with
518           GCC versions older than 10 can silently result in
519           broken liblzma.so.5 (incorrect symbol versions)! If you
520           want to use -flto with GCC, you must use GCC >= 10.
521           LTO with Clang seems to work even with the traditional
522           __asm__(".symver ...") method.
524     * xzgrep: Fixed compatibility with old shells that break if
525       comments inside command substitutions have apostrophes (').
526       This problem was introduced in 5.2.6.
528     * Build systems:
530         - New #define in config.h: HAVE_SYMBOL_VERSIONS_LINUX
532         - Windows: Fixed liblzma.dll build with Visual Studio project
533           files. It broke in 5.2.6 due to a change that was made to
534           improve CMake support.
536         - Windows: Building liblzma with UNICODE defined should now
537           work.
539         - CMake files are now actually included in the release tarball.
540           They should have been in 5.2.5 already.
542         - Minor CMake fixes and improvements.
544     * Added a new translation: Turkish
547 5.2.6 (2022-08-12)
549     * xz:
551         - The --keep option now accepts symlinks, hardlinks, and
552           setuid, setgid, and sticky files. Previously this required
553           using --force.
555         - When copying metadata from the source file to the destination
556           file, don't try to set the group (GID) if it is already set
557           correctly. This avoids a failure on OpenBSD (and possibly on
558           a few other OSes) where files may get created so that their
559           group doesn't belong to the user, and fchown(2) can fail even
560           if it needs to do nothing.
562         - Cap --memlimit-compress to 2000 MiB instead of 4020 MiB on
563           MIPS32 because on MIPS32 userspace processes are limited
564           to 2 GiB of address space.
566     * liblzma:
568         - Fixed a missing error-check in the threaded encoder. If a
569           small memory allocation fails, a .xz file with an invalid
570           Index field would be created. Decompressing such a file would
571           produce the correct output but result in an error at the end.
572           Thus this is a "mild" data corruption bug. Note that while
573           a failed memory allocation can trigger the bug, it cannot
574           cause invalid memory access.
576         - The decoder for .lzma files now supports files that have
577           uncompressed size stored in the header and still use the
578           end of payload marker (end of stream marker) at the end
579           of the LZMA stream. Such files are rare but, according to
580           the documentation in LZMA SDK, they are valid.
581           doc/lzma-file-format.txt was updated too.
583         - Improved 32-bit x86 assembly files:
584             * Support Intel Control-flow Enforcement Technology (CET)
585             * Use non-executable stack on FreeBSD.
587         - Visual Studio: Use non-standard _MSVC_LANG to detect C++
588           standard version in the lzma.h API header. It's used to
589           detect when "noexcept" can be used.
591     * xzgrep:
593         - Fixed arbitrary command injection via a malicious filename
594           (CVE-2022-1271, ZDI-CAN-16587). A standalone patch for
595           this was released to the public on 2022-04-07. A slight
596           robustness improvement has been made since then and, if
597           using GNU or *BSD grep, a new faster method is now used
598           that doesn't use the old sed-based construct at all. This
599           also fixes bad output with GNU grep >= 3.5 (2020-09-27)
600           when xzgrepping binary files.
602           This vulnerability was discovered by:
603           cleemy desu wayo working with Trend Micro Zero Day Initiative
605         - Fixed detection of corrupt .bz2 files.
607         - Improved error handling to fix exit status in some situations
608           and to fix handling of signals: in some situations a signal
609           didn't make xzgrep exit when it clearly should have. It's
610           possible that the signal handling still isn't quite perfect
611           but hopefully it's good enough.
613         - Documented exit statuses on the man page.
615         - xzegrep and xzfgrep now use "grep -E" and "grep -F" instead
616           of the deprecated egrep and fgrep commands.
618         - Fixed parsing of the options -E, -F, -G, -P, and -X. The
619           problem occurred when multiple options were specied in
620           a single argument, for example,
622               echo foo | xzgrep -Fe foo
624           treated foo as a filename because -Fe wasn't correctly
625           split into -F -e.
627         - Added zstd support.
629     * xzdiff/xzcmp:
631         - Fixed wrong exit status. Exit status could be 2 when the
632           correct value is 1.
634         - Documented on the man page that exit status of 2 is used
635           for decompression errors.
637         - Added zstd support.
639     * xzless:
641         - Fix less(1) version detection. It failed if the version number
642           from "less -V" contained a dot.
644     * Translations:
646         - Added new translations: Catalan, Croatian, Esperanto,
647           Korean, Portuguese, Romanian, Serbian, Spanish, Swedish,
648           and Ukrainian
650         - Updated the Brazilian Portuguese translation.
652         - Added French man page translation. This and the existing
653           German translation aren't complete anymore because the
654           English man pages got a few updates and the translators
655           weren't reached so that they could update their work.
657     * Build systems:
659         - Windows: Fix building of resource files when config.h isn't
660           used. CMake + Visual Studio can now build liblzma.dll.
662         - Various fixes to the CMake support. Building static or shared
663           liblzma should work fine in most cases. In contrast, building
664           the command line tools with CMake is still clearly incomplete
665           and experimental and should be used for testing only.
668 5.2.5 (2020-03-17)
670     * liblzma:
672         - Fixed several C99/C11 conformance bugs. Now the code is clean
673           under gcc/clang -fsanitize=undefined. Some of these changes
674           might have a negative effect on performance with old GCC
675           versions or compilers other than GCC and Clang. The configure
676           option --enable-unsafe-type-punning can be used to (mostly)
677           restore the old behavior but it shouldn't normally be used.
679         - Improved API documentation of lzma_properties_decode().
681         - Added a very minor encoder speed optimization.
683     * xz:
685         - Fixed a crash in "xz -dcfv not_an_xz_file". All four options
686           were required to trigger it. The crash occurred in the
687           progress indicator code when xz was in passthru mode where
688           xz works like "cat".
690         - Fixed an integer overflow with 32-bit off_t. It could happen
691           when decompressing a file that has a long run of zero bytes
692           which xz would try to write as a sparse file. Since the build
693           system enables large file support by default, off_t is
694           normally 64-bit even on 32-bit systems.
696         - Fixes for --flush-timeout:
697             * Fix semi-busy-waiting.
698             * Avoid unneeded flushes when no new input has arrived
699               since the previous flush was completed.
701         - Added a special case for 32-bit xz: If --memlimit-compress is
702           used to specify a limit that exceeds 4020 MiB, the limit will
703           be set to 4020 MiB. The values "0" and "max" aren't affected
704           by this and neither is decompression. This hack can be
705           helpful when a 32-bit xz has access to 4 GiB address space
706           but the specified memlimit exceeds 4 GiB. This can happen
707           e.g. with some scripts.
709         - Capsicum sandbox is now enabled by default where available
710           (FreeBSD >= 10). The sandbox debug messages (xz -vv) were
711           removed since they seemed to be more annoying than useful.
713         - DOS build now requires DJGPP 2.05 instead of 2.04beta.
714           A workaround for a locale problem with DJGPP 2.05 was added.
716     * xzgrep and other scripts:
718         - Added a configure option --enable-path-for-scripts=PREFIX.
719           It is disabled by default except on Solaris where the default
720           is /usr/xpg4/bin. See INSTALL for details.
722         - Added a workaround for a POSIX shell detection problem on
723           Solaris.
725     * Build systems:
727         - Added preliminary build instructions for z/OS. See INSTALL
728           section 1.2.9.
730         - Experimental CMake support was added. It should work to build
731           static liblzma on a few operating systems. It may or may not
732           work to build shared liblzma. On some platforms it can build
733           xz and xzdec too but those are only for testing. See the
734           comment in the beginning of CMakeLists.txt for details.
736         - Visual Studio project files were updated.
737           WindowsTargetPlatformVersion was removed from VS2017 files
738           and set to "10.0" in the added VS2019 files. In the future
739           the VS project files will be removed when CMake support is
740           good enough.
742         - New #defines in config.h: HAVE___BUILTIN_ASSUME_ALIGNED,
743           HAVE___BUILTIN_BSWAPXX, and TUKLIB_USE_UNSAFE_TYPE_PUNNING.
745         - autogen.sh has a new optional dependency on po4a and a new
746           option --no-po4a to skip that step. This matters only if one
747           wants to remake the build files. po4a is used to update the
748           translated man pages but as long as the man pages haven't
749           been modified, there's nothing to update and one can use
750           --no-po4a to avoid the dependency on po4a.
752     * Translations:
754         - XZ Utils translations are now handled by the Translation
755           Project: https://translationproject.org/domain/xz.html
757         - All man pages are now included in German too.
759         - New xz translations: Brazilian Portuguese, Finnish,
760           Hungarian, Chinese (simplified), Chinese (traditional),
761           and Danish (partial translation)
763         - Updated xz translations: French, German, Italian, and Polish
765         - Unfortunately a few new xz translations weren't included due
766           to technical problems like too long lines in --help output or
767           misaligned column headings in tables. In the future, many of
768           these strings will be split and e.g. the table column
769           alignment will be handled in software. This should make the
770           strings easier to translate.
773 5.2.4 (2018-04-29)
775     * liblzma:
777         - Allow 0 as memory usage limit instead of returning
778           LZMA_PROG_ERROR. Now 0 is treated as if 1 byte was specified,
779           which effectively is the same as 0.
781         - Use "noexcept" keyword instead of "throw()" in the public
782           headers when a C++11 (or newer standard) compiler is used.
784         - Added a portability fix for recent Intel C Compilers.
786         - Microsoft Visual Studio build files have been moved under
787           windows/vs2013 and windows/vs2017.
789     * xz:
791         - Fix "xz --list --robot missing_or_bad_file.xz" which would
792           try to print an uninitialized string and thus produce garbage
793           output. Since the exit status is non-zero, most uses of such
794           a command won't try to interpret the garbage output.
796         - "xz --list foo.xz" could print "Internal error (bug)" in a
797           corner case where a specific memory usage limit had been set.
800 5.2.3 (2016-12-30)
802     * xz:
804         - Always close a file before trying to delete it to avoid
805           problems on some operating system and file system combinations.
807         - Fixed copying of file timestamps on Windows.
809         - Added experimental (disabled by default) sandbox support using
810           Capsicum (FreeBSD >= 10). See --enable-sandbox in INSTALL.
812     * C99/C11 conformance fixes to liblzma. The issues affected at least
813       some builds using link-time optimizations.
815     * Fixed bugs in the rarely-used function lzma_index_dup().
817     * Use of external SHA-256 code is now disabled by default.
818       It can still be enabled by passing --enable-external-sha256
819       to configure. The reasons to disable it by default (see INSTALL
820       for more details):
822         - Some OS-specific SHA-256 implementations conflict with
823           OpenSSL and cause problems in programs that link against both
824           liblzma and libcrypto. At least FreeBSD 10 and MINIX 3.3.0
825           are affected.
827         - The internal SHA-256 is faster than the SHA-256 code in
828           some operating systems.
830     * Changed CPU core count detection to use sched_getaffinity() on
831       GNU/Linux and GNU/kFreeBSD.
833     * Fixes to the build-system and xz to make xz buildable even when
834       encoders, decoders, or threading have been disabled from libilzma
835       using configure options. These fixes added two new #defines to
836       config.h: HAVE_ENCODERS and HAVE_DECODERS.
839 5.2.2 (2015-09-29)
841     * Fixed bugs in QNX-specific code.
843     * Omitted the use of pipe2() even if it is available to avoid
844       portability issues with some old Linux and glibc combinations.
846     * Updated German translation.
848     * Added project files to build static and shared liblzma (not the
849       whole XZ Utils) with Visual Studio 2013 update 2 or later.
851     * Documented that threaded decompression hasn't been implemented
852       yet. A 5.2.0 NEWS entry describing multi-threading support had
853       incorrectly said "decompression" when it should have said
854       "compression".
857 5.2.1 (2015-02-26)
859     * Fixed a compression-ratio regression in fast mode of LZMA1 and
860       LZMA2. The bug is present in 5.1.4beta and 5.2.0 releases.
862     * Fixed a portability problem in xz that affected at least OpenBSD.
864     * Fixed xzdiff to be compatible with FreeBSD's mktemp which differs
865       from most other mktemp implementations.
867     * Changed CPU core count detection to use cpuset_getaffinity() on
868       FreeBSD.
871 5.2.0 (2014-12-21)
873     Since 5.1.4beta:
875     * All fixes from 5.0.8
877     * liblzma: Fixed lzma_stream_encoder_mt_memusage() when a preset
878       was used.
880     * xzdiff: If mktemp isn't installed, mkdir will be used as
881       a fallback to create a temporary directory. Installing mktemp
882       is still recommended.
884     * Updated French, German, Italian, Polish, and Vietnamese
885       translations.
887     Summary of fixes and new features added in the 5.1.x development
888     releases:
890     * liblzma:
892         - Added support for multi-threaded compression. See the
893           lzma_mt structure, lzma_stream_encoder_mt(), and
894           lzma_stream_encoder_mt_memusage() in <lzma/container.h>,
895           lzma_get_progress() in <lzma/base.h>, and lzma_cputhreads()
896           in <lzma/hardware.h> for details.
898         - Made the uses of lzma_allocator const correct.
900         - Added lzma_block_uncomp_encode() to create uncompressed
901           .xz Blocks using LZMA2 uncompressed chunks.
903         - Added support for LZMA_IGNORE_CHECK.
905         - A few speed optimizations were made.
907         - Added support for symbol versioning. It is enabled by default
908           on GNU/Linux, other GNU-based systems, and FreeBSD.
910         - liblzma (not the whole XZ Utils) should now be buildable
911           with MSVC 2013 update 2 or later using windows/config.h.
913     * xz:
915         - Fixed a race condition in the signal handling. It was
916           possible that e.g. the first SIGINT didn't make xz exit
917           if reading or writing blocked and one had bad luck. The fix
918           is non-trivial, so as of writing it is unknown if it will be
919           backported to the v5.0 branch.
921         - Multi-threaded compression can be enabled with the
922           --threads (-T) option.
923           [Fixed: This originally said "decompression".]
925         - New command line options in xz: --single-stream,
926           --block-size=SIZE, --block-list=SIZES,
927           --flush-timeout=TIMEOUT, and --ignore-check.
929         - xz -lvv now shows the minimum xz version that is required to
930           decompress the file. Currently it is 5.0.0 for all supported
931           .xz files except files with empty LZMA2 streams require 5.0.2.
933     * xzdiff and xzgrep now support .lzo files if lzop is installed.
934       The .tzo suffix is also recognized as a shorthand for .tar.lzo.
937 5.1.4beta (2014-09-14)
939     * All fixes from 5.0.6
941     * liblzma: Fixed the use of presets in threaded encoder
942       initialization.
944     * xz --block-list and --block-size can now be used together
945       in single-threaded mode. Previously the combination only
946       worked in multi-threaded mode.
948     * Added support for LZMA_IGNORE_CHECK to liblzma and made it
949       available in xz as --ignore-check.
951     * liblzma speed optimizations:
953         - Initialization of a new LZMA1 or LZMA2 encoder has been
954           optimized. (The speed of reinitializing an already-allocated
955           encoder isn't affected.) This helps when compressing many
956           small buffers with lzma_stream_buffer_encode() and other
957           similar situations where an already-allocated encoder state
958           isn't reused. This speed-up is visible in xz too if one
959           compresses many small files one at a time instead running xz
960           once and giving all files as command-line arguments.
962         - Buffer comparisons are now much faster when unaligned access
963           is allowed (configured with --enable-unaligned-access). This
964           speeds up encoding significantly. There is arch-specific code
965           for 32-bit and 64-bit x86 (32-bit needs SSE2 for the best
966           results and there's no run-time CPU detection for now).
967           For other archs there is only generic code which probably
968           isn't as optimal as arch-specific solutions could be.
970         - A few speed optimizations were made to the SHA-256 code.
971           (Note that the builtin SHA-256 code isn't used on all
972           operating systems.)
974     * liblzma can now be built with MSVC 2013 update 2 or later
975       using windows/config.h.
977     * Vietnamese translation was added.
980 5.1.3alpha (2013-10-26)
982     * All fixes from 5.0.5
984     * liblzma:
986         - Fixed a deadlock in the threaded encoder.
988         - Made the uses of lzma_allocator const correct.
990         - Added lzma_block_uncomp_encode() to create uncompressed
991           .xz Blocks using LZMA2 uncompressed chunks.
993         - Added support for native threads on Windows and the ability
994           to detect the number of CPU cores.
996     * xz:
998         - Fixed a race condition in the signal handling. It was
999           possible that e.g. the first SIGINT didn't make xz exit
1000           if reading or writing blocked and one had bad luck. The fix
1001           is non-trivial, so as of writing it is unknown if it will be
1002           backported to the v5.0 branch.
1004         - Made the progress indicator work correctly in threaded mode.
1006         - Threaded encoder now works together with --block-list=SIZES.
1008         - Added preliminary support for --flush-timeout=TIMEOUT.
1009           It can be useful for (somewhat) real-time streaming. For
1010           now the decompression side has to be done with something
1011           else than the xz tool due to how xz does buffering, but this
1012           should be fixed.
1015 5.1.2alpha (2012-07-04)
1017     * All fixes from 5.0.3 and 5.0.4
1019     * liblzma:
1021         - Fixed a deadlock and an invalid free() in the threaded encoder.
1023         - Added support for symbol versioning. It is enabled by default
1024           on GNU/Linux, other GNU-based systems, and FreeBSD.
1026         - Use SHA-256 implementation from the operating system if one is
1027           available in libc, libmd, or libutil. liblzma won't use e.g.
1028           OpenSSL or libgcrypt to avoid introducing new dependencies.
1030         - Fixed liblzma.pc for static linking.
1032         - Fixed a few portability bugs.
1034     * xz --decompress --single-stream now fixes the input position after
1035       successful decompression. Now the following works:
1037           echo foo | xz > foo.xz
1038           echo bar | xz >> foo.xz
1039           ( xz -dc --single-stream ; xz -dc --single-stream ) < foo.xz
1041       Note that it doesn't work if the input is not seekable
1042       or if there is Stream Padding between the concatenated
1043       .xz Streams.
1045     * xz -lvv now shows the minimum xz version that is required to
1046       decompress the file. Currently it is 5.0.0 for all supported .xz
1047       files except files with empty LZMA2 streams require 5.0.2.
1049     * Added an *incomplete* implementation of --block-list=SIZES to xz.
1050       It only works correctly in single-threaded mode and when
1051       --block-size isn't used at the same time. --block-list allows
1052       specifying the sizes of Blocks which can be useful e.g. when
1053       creating files for random-access reading.
1056 5.1.1alpha (2011-04-12)
1058     * All fixes from 5.0.2
1060     * liblzma fixes that will also be included in 5.0.3:
1062         - A memory leak was fixed.
1064         - lzma_stream_buffer_encode() no longer creates an empty .xz
1065           Block if encoding an empty buffer. Such an empty Block with
1066           LZMA2 data would trigger a bug in 5.0.1 and older (see the
1067           first bullet point in 5.0.2 notes). When releasing 5.0.2,
1068           I thought that no encoder creates this kind of files but
1069           I was wrong.
1071         - Validate function arguments better in a few functions. Most
1072           importantly, specifying an unsupported integrity check to
1073           lzma_stream_buffer_encode() no longer creates a corrupt .xz
1074           file. Probably no application tries to do that, so this
1075           shouldn't be a big problem in practice.
1077         - Document that lzma_block_buffer_encode(),
1078           lzma_easy_buffer_encode(), lzma_stream_encoder(), and
1079           lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK.
1081         - The return values of the _memusage() functions are now
1082           documented better.
1084     * Support for multithreaded compression was added using the simplest
1085       method, which splits the input data into blocks and compresses
1086       them independently. Other methods will be added in the future.
1087       The current method has room for improvement, e.g. it is possible
1088       to reduce the memory usage.
1090     * Added the options --single-stream and --block-size=SIZE to xz.
1092     * xzdiff and xzgrep now support .lzo files if lzop is installed.
1093       The .tzo suffix is also recognized as a shorthand for .tar.lzo.
1095     * Support for short 8.3 filenames under DOS was added to xz. It is
1096       experimental and may change before it gets into a stable release.
1099 5.0.8 (2014-12-21)
1101     * Fixed an old bug in xzgrep that affected OpenBSD and probably
1102       a few other operating systems too.
1104     * Updated French and German translations.
1106     * Added support for detecting the amount of RAM on AmigaOS/AROS.
1108     * Minor build system updates.
1111 5.0.7 (2014-09-20)
1113     * Fix regressions introduced in 5.0.6:
1115         - Fix building with non-GNU make.
1117         - Fix invalid Libs.private value in liblzma.pc which broke
1118           static linking against liblzma if the linker flags were
1119           taken from pkg-config.
1122 5.0.6 (2014-09-14)
1124     * xzgrep now exits with status 0 if at least one file matched.
1126     * A few minor portability and build system fixes
1129 5.0.5 (2013-06-30)
1131     * lzmadec and liblzma's lzma_alone_decoder(): Support decompressing
1132       .lzma files that have less common settings in the headers
1133       (dictionary size other than 2^n or 2^n + 2^(n-1), or uncompressed
1134       size greater than 256 GiB). The limitations existed to avoid false
1135       positives when detecting .lzma files. The lc + lp <= 4 limitation
1136       still remains since liblzma's LZMA decoder has that limitation.
1138       NOTE: xz's .lzma support or liblzma's lzma_auto_decoder() are NOT
1139       affected by this change. They still consider uncommon .lzma headers
1140       as not being in the .lzma format. Changing this would give way too
1141       many false positives.
1143     * xz:
1145         - Interaction of preset and custom filter chain options was
1146           made less illogical. This affects only certain less typical
1147           uses cases so few people are expected to notice this change.
1149           Now when a custom filter chain option (e.g. --lzma2) is
1150           specified, all preset options (-0 ... -9, -e) earlier are on
1151           the command line are completely forgotten. Similarly, when
1152           a preset option is specified, all custom filter chain options
1153           earlier on the command line are completely forgotten.
1155           Example 1: "xz -9 --lzma2=preset=5 -e" is equivalent to "xz -e"
1156           which is equivalent to "xz -6e". Earlier -e didn't put xz back
1157           into preset mode and thus the example command was equivalent
1158           to "xz --lzma2=preset=5".
1160           Example 2: "xz -9e --lzma2=preset=5 -7" is equivalent to
1161           "xz -7". Earlier a custom filter chain option didn't make
1162           xz forget the -e option so the example was equivalent to
1163           "xz -7e".
1165         - Fixes and improvements to error handling.
1167         - Various fixes to the man page.
1169     * xzless: Fixed to work with "less" versions 448 and later.
1171     * xzgrep: Made -h an alias for --no-filename.
1173     * Include the previously missing debug/translation.bash which can
1174       be useful for translators.
1176     * Include a build script for Mac OS X. This has been in the Git
1177       repository since 2010 but due to a mistake in Makefile.am the
1178       script hasn't been included in a release tarball before.
1181 5.0.4 (2012-06-22)
1183     * liblzma:
1185         - Fix lzma_index_init(). It could crash if memory allocation
1186           failed.
1188         - Fix the possibility of an incorrect LZMA_BUF_ERROR when a BCJ
1189           filter is used and the application only provides exactly as
1190           much output space as is the uncompressed size of the file.
1192         - Fix a bug in doc/examples_old/xz_pipe_decompress.c. It didn't
1193           check if the last call to lzma_code() really returned
1194           LZMA_STREAM_END, which made the program think that truncated
1195           files are valid.
1197         - New example programs in doc/examples (old programs are now in
1198           doc/examples_old). These have more comments and more detailed
1199           error handling.
1201     * Fix "xz -lvv foo.xz". It could crash on some corrupted files.
1203     * Fix output of "xz --robot -lv" and "xz --robot -lvv" which
1204       incorrectly printed the filename also in the "foo (x/x)" format.
1206     * Fix exit status of "xzdiff foo.xz bar.xz".
1208     * Fix exit status of "xzgrep foo binary_file".
1210     * Fix portability to EBCDIC systems.
1212     * Fix a configure issue on AIX with the XL C compiler. See INSTALL
1213       for details.
1215     * Update French, German, Italian, and Polish translations.
1218 5.0.3 (2011-05-21)
1220     * liblzma fixes:
1222         - A memory leak was fixed.
1224         - lzma_stream_buffer_encode() no longer creates an empty .xz
1225           Block if encoding an empty buffer. Such an empty Block with
1226           LZMA2 data would trigger a bug in 5.0.1 and older (see the
1227           first bullet point in 5.0.2 notes). When releasing 5.0.2,
1228           I thought that no encoder creates this kind of files but
1229           I was wrong.
1231         - Validate function arguments better in a few functions. Most
1232           importantly, specifying an unsupported integrity check to
1233           lzma_stream_buffer_encode() no longer creates a corrupt .xz
1234           file. Probably no application tries to do that, so this
1235           shouldn't be a big problem in practice.
1237         - Document that lzma_block_buffer_encode(),
1238           lzma_easy_buffer_encode(), lzma_stream_encoder(), and
1239           lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK.
1241         - The return values of the _memusage() functions are now
1242           documented better.
1244     * Fix command name detection in xzgrep. xzegrep and xzfgrep now
1245       correctly use egrep and fgrep instead of grep.
1247     * French translation was added.
1250 5.0.2 (2011-04-01)
1252     * LZMA2 decompressor now correctly accepts LZMA2 streams with no
1253       uncompressed data. Previously it considered them corrupt. The
1254       bug can affect applications that use raw LZMA2 streams. It is
1255       very unlikely to affect .xz files because no compressor creates
1256       .xz files with empty LZMA2 streams. (Empty .xz files are a
1257       different thing than empty LZMA2 streams.)
1259     * "xz --suffix=.foo filename.foo" now refuses to compress the
1260       file due to it already having the suffix .foo. It was already
1261       documented on the man page, but the code lacked the test.
1263     * "xzgrep -l foo bar.xz" works now.
1265     * Polish translation was added.
1268 5.0.1 (2011-01-29)
1270     * xz --force now (de)compresses files that have setuid, setgid,
1271       or sticky bit set and files that have multiple hard links.
1272       The man page had it documented this way already, but the code
1273       had a bug.
1275     * gzip and bzip2 support in xzdiff was fixed.
1277     * Portability fixes
1279     * Minor fix to Czech translation
1282 5.0.0 (2010-10-23)
1284     Only the most important changes compared to 4.999.9beta are listed
1285     here. One change is especially important:
1287       * The memory usage limit is now disabled by default. Some scripts
1288         written before this change may have used --memory=max on xz command
1289         line or in XZ_OPT. THESE USES OF --memory=max SHOULD BE REMOVED
1290         NOW, because they interfere with user's ability to set the memory
1291         usage limit himself. If user-specified limit causes problems to
1292         your script, blame the user.
1294     Other significant changes:
1296       * Added support for XZ_DEFAULTS environment variable. This variable
1297         allows users to set default options for xz, e.g. default memory
1298         usage limit or default compression level. Scripts that use xz
1299         must never set or unset XZ_DEFAULTS. Scripts should use XZ_OPT
1300         instead if they need a way to pass options to xz via an
1301         environment variable.
1303       * The compression settings associated with the preset levels
1304         -0 ... -9 have been changed. --extreme was changed a little too.
1305         It is now less likely to make compression worse, but with some
1306         files the new --extreme may compress slightly worse than the old
1307         --extreme.
1309       * If a preset level (-0 ... -9) is specified after a custom filter
1310         chain options have been used (e.g. --lzma2), the custom filter
1311         chain will be forgotten. Earlier the preset options were
1312         completely ignored after custom filter chain options had been
1313         seen.
1315       * xz will create sparse files when decompressing if the uncompressed
1316         data contains long sequences of binary zeros. This is done even
1317         when writing to standard output that is connected to a regular
1318         file and certain additional conditions are met to make it safe.
1320       * Support for "xz --list" was added. Combine with --verbose or
1321         --verbose --verbose (-vv) for detailed output.
1323       * I had hoped that liblzma API would have been stable after
1324         4.999.9beta, but there have been a couple of changes in the
1325         advanced features, which don't affect most applications:
1327           - Index handling code was revised. If you were using the old
1328             API, you will get a compiler error (so it's easy to notice).
1330           - A subtle but important change was made to the Block handling
1331             API. lzma_block.version has to be initialized even for
1332             lzma_block_header_decode(). Code that doesn't do it will work
1333             for now, but might break in the future, which makes this API
1334             change easy to miss.
1336       * The major soname has been bumped to 5.0.0. liblzma API and ABI
1337         are now stable, so the need to recompile programs linking against
1338         liblzma shouldn't arise soon.