comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/share/doc/xz/NEWS @ 68:5028fdace37b

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 16:23:26 -0400
parents
children
comparison
equal deleted inserted replaced
67:0e9998148a16 68:5028fdace37b
1
2 XZ Utils Release Notes
3 ======================
4
5 5.6.4 (2025-01-23)
6
7 * liblzma: Fix LZMA/LZMA2 encoder on big endian ARM64.
8
9 * xz:
10
11 - Fix --filters= and --filters1= ... --filters9= options
12 parsing. They require an argument, thus "xz --filters lzma2"
13 should work in addition to "xz --filters=lzma2".
14
15 - On the man page, note in the --compress and --decompress
16 options that the default behavior is to delete the input
17 file unless writing to standard output. It was already
18 documented in the DESCRIPTION section but new users in
19 a hurry might miss it.
20
21 * Windows (native builds, not Cygwin): Fix regressions introduced
22 in XZ Utils 5.6.3 which caused non-ASCII characters to display
23 incorrectly. Only builds with translation support were affected
24 (--enable-nls or ENABLE_NLS=ON). The following changes affect
25 builds that have translations enabled:
26
27 - Require UCRT because MSVCRT doesn't support UTF-8
28 locales and thus translations won't be readable on
29 Windows 10 version 1903 and later. (MSVCRT builds
30 are still possible with --disable-nls or ENABLE_NLS=OFF.)
31
32 - Require gettext-runtime >= 0.23.1 because older versions
33 don't autodetect the use of the UTF-8 code page. This
34 resulted in garbled non-ASCII characters even with UCRT.
35
36 - Partially fix alignment issues in xz --verbose --list
37 with translated messages. Chinese (simplified),
38 Chinese (traditional), and Korean column headings
39 are misaligned still because Windows and MinGW-w64
40 don't provide wcwidth() and XZ Utils doesn't include
41 a replacement function either.
42
43 * CMake: Explicitly disable unity builds. This prevents build
44 failures when another project uses XZ Utils via CMake's
45 FetchContent module, and that project enables unity builds.
46
47 * Update Chinese (traditional) and Serbian translations.
48
49
50 5.6.3 (2024-10-01)
51
52 IMPORTANT: This includes a Windows-specific security fix to
53 the command line tools (CVE-2024-47611). liblzma isn't affected
54 by this issue.
55
56 * liblzma:
57
58 - Fix x86-64 inline assembly compatibility with GNU Binutils
59 older than 2.27.
60
61 - Fix the build with GCC 4.2 on OpenBSD/sparc64.
62
63 * xzdec: Display an error instead of failing silently if the
64 unsupported option -M is specified.
65
66 * lzmainfo: Fix integer overflows when rounding the dictionary and
67 uncompressed sizes to the nearest mebibyte.
68
69 * Windows (except Cygwin and MSYS2): Add an application manifest to
70 xz, xzdec, lzmadec, and lzmainfo executables:
71
72 - Declare them compatible with Vista/7/8/8.1/10/11. This way
73 the programs won't needlessly use Operating System Context
74 of Vista when running on later Windows versions. This setting
75 doesn't mean that the executables cannot run on even older
76 versions if otherwise built that way.
77
78 - Declare them as UAC-compliant. MSVC added this by default
79 already but it wasn't done with MinGW-w64, at least not
80 with all toolchain variants.
81
82 - Declare them long path aware. This makes long path names
83 work on Windows 10 and 11 if the feature has been enabled
84 in the Windows registry.
85
86 - Use the UTF-8 code page on Windows 10 version 1903 and later.
87
88 * Now command line tools can access files whose names
89 contain characters that don't exist in the current
90 legacy code page.
91
92 * The options --files and --files0 now expect file lists
93 to be in UTF-8 instead of the legacy code page.
94
95 * This fixes a security issue: If a command line contains
96 Unicode characters (for example, filenames) that don't
97 exist in the current legacy code page, the characters are
98 converted to similar-looking characters with best-fit
99 mapping. Some best-fit mappings result in ASCII
100 characters that change the meaning of the command line,
101 which can be exploited with malicious filenames to do
102 argument injection or directory traversal attacks.
103 UTF-8 avoids best-fit mappings and thus fixes the issue.
104 (CVE-2024-47611)
105
106 Forcing the process code page to UTF-8 is possible only
107 on Windows 10 version 1903 and later. The command line
108 tools remain vulnerable if used on an old older
109 version of Windows.
110
111 This issue was discovered by Orange Tsai and splitline
112 from DEVCORE Research Team.
113
114 A related smaller issue remains: Windows filenames may
115 contain unpaired surrogates (invalid UTF-16). These are
116 converted to the replacement character U+FFFD in the
117 UTF-8 code page. Thus, filenames with different unpaired
118 surrogates appear identical and aren't distinguishable
119 from filenames that contain the actual replacement
120 character U+FFFD.
121
122 * When building with MinGW-w64, it is recommended to use
123 UCRT version instead of the old MSVCRT. For example,
124 non-ASCII characters from filenames won't print
125 correctly in messages to console with MSVCRT with
126 the UTF-8 code page (a cosmetic issue). liblzma-only
127 builds are still fine with MSVCRT.
128
129 - Cygwin and MSYS2 process command line options differently and
130 the above issues don't exist. There is no need to replace the
131 default application manifest on Cygwin and MSYS2.
132
133 * Autotools-based build:
134
135 - Fix feature checks with link-time optimization (-flto).
136
137 - Solaris: Fix a compatibility issue in version.sh. It matters
138 if one wants to regenerate configure by running autoconf.
139
140 * CMake:
141
142 - Use paths relative to ${prefix} in liblzma.pc when possible.
143 This is done only with CMake >= 3.20.
144
145 - MSVC: Install liblzma.pc as it can be useful with MSVC too.
146
147 - Windows: Fix liblzma filename prefix, for example:
148
149 * Cygwin: The DLL was incorrectly named liblzma-5.dll.
150 Now it is cyglzma-5.dll.
151
152 * MSVC: Rename import library from liblzma.lib to lzma.lib
153 while keeping liblzma.dll name as is. This helps with
154 "pkgconf --msvc-syntax --libs liblzma" because it mungles
155 "-llzma" in liblzma.pc to "lzma.lib".
156
157 * MinGW-w64: No changes.
158
159 - Windows: Use the correct resource file for lzmadec.exe.
160 Previously the resource file for xzdec.exe was used for both.
161 Autotools-based build isn't affected.
162
163 - Prefer a C11 compiler over a C99 compiler but accept both.
164
165 - Link Threads::Threads against liblzma using PRIVATE so that
166 -pthread and such flags won't unnecessarily get included in
167 the usage requirements of shared liblzma. That is,
168 target_link_libraries(foo PRIVATE liblzma::liblzma) no
169 longer adds -pthread if using POSIX threads and linking
170 against shared liblzma. The threading flags are still added
171 if linking against static liblzma.
172
173 * Updated translations: Catalan, Chinese (simplified), and
174 Brazilian Portuguese.
175
176
177 5.6.2 (2024-05-29)
178
179 * Remove the backdoor (CVE-2024-3094).
180
181 * Not changed: Memory sanitizer (MSAN) has a false positive
182 in the CRC CLMUL code which also makes OSS Fuzz unhappy.
183 Valgrind is smarter and doesn't complain.
184
185 A revision to the CLMUL code is coming anyway and this issue
186 will be cleaned up as part of it. It won't be backported to
187 5.6.x or 5.4.x because the old code isn't wrong. There is
188 no reason to risk introducing regressions in old branches
189 just to silence a false positive.
190
191 * liblzma:
192
193 - lzma_index_decoder() and lzma_index_buffer_decode(): Fix
194 a missing output pointer initialization (*i = NULL) if the
195 functions are called with invalid arguments. The API docs
196 say that such an initialization is always done. In practice
197 this matters very little because the problem can only occur
198 if the calling application has a bug and these functions
199 return LZMA_PROG_ERROR.
200
201 - lzma_str_to_filters(): Fix a missing output pointer
202 initialization (*error_pos = 0). This is very similar
203 to the fix above.
204
205 - Fix C standard conformance with function pointer types.
206
207 - Remove GNU indirect function (IFUNC) support. This is *NOT*
208 done for security reasons even though the backdoor relied on
209 this code. The performance benefits of IFUNC are too tiny in
210 this project to make the extra complexity worth it.
211
212 - FreeBSD on ARM64: Add error checking to CRC32 instruction
213 support detection.
214
215 - Fix building with NVIDIA HPC SDK.
216
217 * xz:
218
219 - Fix a C standard conformance issue in --block-list parsing
220 (arithmetic on a null pointer).
221
222 - Fix a warning from GNU groff when processing the man page:
223 "warning: cannot select font 'CW'"
224
225 * xzdec: Add support for Linux Landlock ABI version 4. xz already
226 had the v3-to-v4 change but it had been forgotten from xzdec.
227
228 * Autotools-based build system (configure):
229
230 - Symbol versioning variant can now be overridden with
231 --enable-symbol-versions. Documentation in INSTALL was
232 updated to match.
233
234 - Add new configure option --enable-doxygen to enable
235 generation and installation of the liblzma API documentation
236 using Doxygen. Documentation in INSTALL and PACKAGERS was
237 updated to match.
238
239 CMake:
240
241 - Fix detection of Linux Landlock support. The detection code
242 in CMakeLists.txt had been sabotaged.
243
244 - Disable symbol versioning on non-glibc Linux to match what
245 the Autotools build does. For example, symbol versioning
246 isn't enabled with musl.
247
248 - Symbol versioning variant can now be overridden by setting
249 SYMBOL_VERSIONING to "OFF", "generic", or "linux".
250
251 - Add support for all tests in typical build configurations.
252 Now the only difference to the tests coverage to Autotools
253 is that CMake-based build will skip more tests if features
254 are disabled. Such builds are only for special cases like
255 embedded systems.
256
257 - Separate the CMake code for the tests into tests/tests.cmake.
258 It is used conditionally, thus it is possible to
259
260 rm -rf tests
261
262 and the CMake-based build will still work normally except
263 that no tests are then available.
264
265 - Add a option ENABLE_DOXYGEN to enable generation and
266 installation of the liblzma API documentation using Doxygen.
267
268 * Documentation:
269
270 - Omit the Doxygen-generated liblzma API documentation from the
271 package. Instead, the generation and installation of the API
272 docs can be enabled with a configure or CMake option if
273 Doxygen is available.
274
275 - Remove the XZ logo which was used in the API documentation.
276 The logo has been retired and isn't used by the project
277 anymore. However, it's OK to use it in contexts that refer
278 to the backdoor incident.
279
280 - Remove the PDF versions of the man pages from the source
281 package. These existed primarily for users of operating
282 systems which don't come with tools to render man page
283 source files. The plain text versions are still included
284 in doc/man/txt. PDF files can still be generated to doc/man,
285 if the required tools are available, using "make pdf" after
286 running "configure".
287
288 - Update home page URLs back to their old locations on
289 tukaani.org.
290
291 - Update maintainer info.
292
293 * Tests:
294
295 - In tests/files/README, explain how to recreate the ARM64
296 test files.
297
298 - Remove two tests that used tiny x86 and SPARC object files
299 as the input files. The matching .c file was included but
300 the object files aren't easy to reproduce. The test cases
301 weren't great anyway; they were from the early days (2009)
302 of the project when the test suite had very few tests.
303
304 - Improve a few tests.
305
306
307 5.6.1 (2024-03-09)
308
309 IMPORTANT: This fixed bugs in the backdoor (CVE-2024-3094) (someone
310 had forgot to run Valgrind).
311
312 * liblzma: Fixed two bugs relating to GNU indirect function (IFUNC)
313 with GCC. The more serious bug caused a program linked with
314 liblzma to crash on start up if the flag -fprofile-generate was
315 used to build liblzma. The second bug caused liblzma to falsely
316 report an invalid write to Valgrind when loading liblzma.
317
318 * xz: Changed the messages for thread reduction due to memory
319 constraints to only appear under the highest verbosity level.
320
321 * Build:
322
323 - Fixed a build issue when the header file <linux/landlock.h>
324 was present on the system but the Landlock system calls were
325 not defined in <sys/syscall.h>.
326
327 - The CMake build now warns and disables NLS if both gettext
328 tools and pre-created .gmo files are missing. Previously,
329 this caused the CMake build to fail.
330
331 * Minor improvements to man pages.
332
333 * Minor improvements to tests.
334
335
336 5.6.0 (2024-02-24)
337
338 IMPORTANT: This added a backdoor (CVE-2024-3094). It's enabled only
339 in the release tarballs.
340
341 This bumps the minor version of liblzma because new features were
342 added. The API and ABI are still backward compatible with liblzma
343 5.4.x and 5.2.x and 5.0.x.
344
345 NOTE: As described in the NEWS for 5.5.2beta, the core components
346 are now under the BSD Zero Clause License (0BSD).
347
348 Since 5.5.2beta:
349
350 * liblzma:
351
352 - Disabled the branchless C variant in the LZMA decoder based
353 on the benchmark results from the community.
354
355 - Disabled x86-64 inline assembly on x32 to fix the build.
356
357 * Sandboxing support in xz:
358
359 - Landlock is now used even when xz needs to create files.
360 In this case the sandbox has to be more permissive than
361 when no files need to be created. A similar thing was
362 already in use with pledge(2) since 5.3.4alpha.
363
364 - Landlock and pledge(2) are now stricter when reading from
365 more than one input file and only writing to standard output.
366
367 - Added support for Landlock ABI version 4.
368
369 * CMake:
370
371 - Default to -O2 instead of -O3 with CMAKE_BUILD_TYPE=Release.
372 -O3 is not useful for speed and makes the code larger.
373
374 - Now builds lzmainfo and lzmadec.
375
376 - xzdiff, xzgrep, xzless, xzmore, and their symlinks are now
377 installed. The scripts are also tested during "make test".
378
379 - Added translation support for xz, lzmainfo, and the
380 man pages.
381
382 - Applied the symbol versioning workaround for MicroBlaze that
383 is used in the Autotools build.
384
385 - The general XZ Utils and liblzma API documentation is now
386 installed.
387
388 - The CMake component names were changed a little and several
389 were added. liblzma_Runtime and liblzma_Development are
390 unchanged.
391
392 - Minimum required CMake version is now 3.14. However,
393 translation support is disabled with CMake versions
394 older than 3.20.
395
396 - The CMake-based build is now close to feature parity with the
397 Autotools-based build. Most importantly a few tests aren't
398 run yet. Testing the CMake-based build on different operating
399 systems would be welcome now. See the comment at the top of
400 CMakeLists.txt.
401
402 * Fixed a bug in the Autotools feature test for ARM64 CRC32
403 instruction support for old versions of Clang. This did not
404 affect the CMake build.
405
406 * Windows:
407
408 - The build instructions in INSTALL and windows/INSTALL*.txt
409 were revised completely.
410
411 - windows/build-with-cmake.bat along with the instructions
412 in windows/INSTALL-MinGW-w64_with_CMake.txt should make
413 it very easy to build liblzma.dll and xz.exe on Windows
414 using CMake and MinGW-w64 with either GCC or Clang/LLVM.
415
416 - windows/build.bash was updated. It now works on MSYS2 and
417 on GNU/Linux (cross-compiling) to create a .zip and .7z
418 package for 32-bit and 64-bit x86 using GCC + MinGW-w64.
419
420 * The TODO file is no longer installed as part of the
421 documentation. The file is out of date and does not reflect
422 the actual tasks that will be completed in the future.
423
424 * Translations:
425
426 - Translated lzmainfo man pages are now installed. These
427 had been forgotten in earlier versions.
428
429 - Updated Croatian, Esperanto, German, Hungarian, Korean,
430 Polish, Romanian, Spanish, Swedish, Vietnamese, and Ukrainian
431 translations.
432
433 - Updated German, Korean, Romanian, and Ukrainian man page
434 translations.
435
436 * Added a few tests.
437
438 Summary of new features added in the 5.5.x development releases:
439
440 * liblzma:
441
442 - LZMA decoder: Speed optimizations to the C code and
443 added GCC & Clang compatible inline assembly for x86-64.
444
445 - Added lzma_mt_block_size() to recommend a Block size for
446 multithreaded encoding.
447
448 - Added CLMUL-based CRC32 on x86-64 and E2K with runtime
449 processor detection. Similar to CRC64, on 32-bit x86 it
450 isn't available unless --disable-assembler is used.
451
452 - Optimized the CRC32 calculation on ARM64 platforms using the
453 CRC32 instructions. Runtime detection for the instruction is
454 used on GNU/Linux, FreeBSD, Windows, and macOS. If the
455 compiler flags indicate unconditional CRC32 instruction
456 support (+crc) then the generic version is not built.
457
458 - Added definitions of mask values like
459 LZMA_INDEX_CHECK_MASK_CRC32 to <lzma/index.h>.
460
461 * xz:
462
463 - Multithreaded mode is now the default. This improves
464 compression speed and creates .xz files that can be
465 decompressed in multithreaded mode. The downsides are
466 increased memory usage and slightly worse compression ratio.
467
468 - Added a new command line option --filters to set the filter
469 chain using the liblzma filter string syntax.
470
471 - Added new command line options --filters1 ... --filters9 to
472 set additional filter chains using the liblzma filter string
473 syntax. The --block-list option now allows specifying filter
474 chains that were set using these new options.
475
476 - Ported the command line tools to Windows MSVC.
477 Visual Studio 2015 or later is required.
478
479 * Added lz4 support to xzdiff/xzcmp and xzgrep.
480
481
482 5.5.2beta (2024-02-14)
483
484 * Licensing change: The core components are now under the
485 BSD Zero Clause License (0BSD). In XZ Utils 5.4.6 and older
486 and 5.5.1alpha these components are in the public domain and
487 obviously remain so; the change affects the new releases only.
488
489 0BSD is an extremely permissive license which doesn't require
490 retaining or reproducing copyright or license notices when
491 distributing the code, thus in practice there is extremely
492 little difference to public domain.
493
494 * liblzma
495
496 - Significant speed optimizations to the LZMA decoder were
497 made. There are now three variants that can be chosen at
498 build time:
499
500 * Basic C version: This is a few percent faster than
501 5.4.x due to some new optimizations.
502
503 * Branchless C: This is currently the default on platforms
504 for which there is no assembly code. This should be a few
505 percent faster than the basic C version.
506
507 * x86-64 inline assembly. This works with GCC and Clang.
508
509 The default choice can currently be overridden by setting
510 LZMA_RANGE_DECODER_CONFIG in CPPFLAGS: 0 means the basic
511 version and 3 means that branchless C version.
512
513 - Optimized the CRC32 calculation on ARM64 platforms using the
514 CRC32 instructions. The instructions are optional in ARMv8.0
515 and are required in ARMv8.1 and later. Runtime detection for
516 the instruction is used on GNU/Linux, FreeBSD, Windows, and
517 macOS. If the compiler flags indicate unconditional CRC32
518 instruction support (+crc) then the generic version is not
519 built.
520
521 * Added lz4 support to xzdiff/xzcmp and xzgrep.
522
523 * Man pages of xzdiff/xzcmp, xzgrep, and xzmore were rewritten
524 to simplify licensing of the man page translations.
525
526 * Translations:
527
528 - Updated Chinese (simplified), German, Korean, Polish,
529 Romanian, Spanish, Swedish, and Ukrainian translations.
530
531 - Updated German, Korean, Romanian, and Ukrainian man page
532 translations.
533
534 * Small improvements to the tests.
535
536 * Added doc/examples/11_file_info.c. It was added to the Git
537 repository in 2017 but forgotten to be added into distribution
538 tarballs.
539
540 * Removed doc/examples_old. These were from 2012.
541
542 * Removed the macos/build.sh script. It had not been updated
543 since 2013.
544
545
546 5.5.1alpha (2024-01-26)
547
548 * Added a new filter for RISC-V binaries. The filter can be used
549 for 32-bit and 64-bit binaries with either little or big
550 endianness. In liblzma, the Filter ID is LZMA_FILTER_RISCV (0x0B)
551 and the xz option is --riscv. liblzma filter string syntax
552 recognizes this filter as "riscv".
553
554 * liblzma:
555
556 - Added lzma_mt_block_size() to recommend a Block size for
557 multithreaded encoding
558
559 - Added CLMUL-based CRC32 on x86-64 and E2K with runtime
560 processor detection. Similar to CRC64, on 32-bit x86 it
561 isn't available unless --disable-assembler is used.
562
563 - Implemented GNU indirect function (IFUNC) as a runtime
564 function dispatching method for CRC32 and CRC64 fast
565 implementations on x86. Only GNU/Linux (glibc) and FreeBSD
566 builds will use IFUNC, unless --enable-ifunc is specified to
567 configure.
568
569 - Added definitions of mask values like
570 LZMA_INDEX_CHECK_MASK_CRC32 to <lzma/index.h>.
571
572 - The XZ logo is now included in the Doxygen generated
573 documentation. It is licensed under Creative Commons
574 Attribution-ShareAlike 4.0.
575
576 * xz:
577
578 - Multithreaded mode is now the default. This improves
579 compression speed and creates .xz files that can be
580 decompressed multithreaded at the cost of increased memory
581 usage and slightly worse compression ratio.
582
583 - Added new command line option --filters to set the filter
584 chain using liblzma filter string syntax.
585
586 - Added new command line options --filters1 ... --filters9 to
587 set additional filter chains using liblzma filter string
588 syntax. The --block-list option now allows specifying filter
589 chains that were set using these new options.
590
591 - Added support for Linux Landlock as a sandboxing method.
592
593 - xzdec now supports pledge(2), Capsicum, and Linux Landlock as
594 sandboxing methods.
595
596 - Progress indicator time stats remain accurate after pausing
597 xz with SIGTSTP.
598
599 - Ported xz and xzdec to Windows MSVC. Visual Studio 2015 or
600 later is required.
601
602 * CMake Build:
603
604 - Supports pledge(2), Capsicum, and Linux Landlock sandboxing
605 methods.
606
607 - Replacement functions for getopt_long() are used on platforms
608 that do not have it.
609
610 * Enabled unaligned access by default on PowerPC64LE and on RISC-V
611 targets that define __riscv_misaligned_fast.
612
613 * Tests:
614
615 - Added two new fuzz targets to OSS-Fuzz.
616
617 - Implemented Continuous Integration (CI) testing using
618 GitHub Actions.
619
620 * Changed quoting style from `...' to '...' in all messages,
621 scripts, and documentation.
622
623 * Added basic Codespell support to help catch typo errors.
624
625
626 5.4.7 (2024-05-29)
627
628 * Not changed: Memory sanitizer (MSAN) has a false positive
629 in the CRC CLMUL code which also makes OSS Fuzz unhappy.
630 Valgrind is smarter and doesn't complain.
631
632 A revision to the CLMUL code is coming anyway and this issue
633 will be cleaned up as part of it. It won't be backported to
634 5.6.x or 5.4.x because the old code isn't wrong. There is
635 no reason to risk introducing regressions in old branches
636 just to silence a false positive.
637
638 * liblzma:
639
640 - lzma_index_decoder() and lzma_index_buffer_decode(): Fix
641 a missing output pointer initialization (*i = NULL) if the
642 functions are called with invalid arguments. The API docs
643 say that such an initialization is always done. In practice
644 this matters very little because the problem can only occur
645 if the calling application has a bug and these functions
646 return LZMA_PROG_ERROR.
647
648 - lzma_str_to_filters(): Fix a missing output pointer
649 initialization (*error_pos = 0). This is very similar
650 to the fix above.
651
652 - Fix C standard conformance with function pointer types.
653 This newly showed up with Clang 17 with -fsanitize=undefined.
654 There are no bug reports about this.
655
656 - Fix building with NVIDIA HPC SDK.
657
658 * xz:
659
660 - Fix a C standard conformance issue in --block-list parsing
661 (arithmetic on a null pointer).
662
663 - Fix a warning from GNU groff when processing the man page:
664 "warning: cannot select font 'CW'"
665
666 - Fix outdated threading related information on the man page.
667
668 * xzless:
669
670 - With "less" version 451 and later, use "||-" instead of "|-"
671 in the environment variable LESSOPEN. This way compressed
672 files that contain no uncompressed data are shown correctly
673 as empty.
674
675 - With "less" version 632 and later, use --show-preproc-errors
676 to make "less" show a warning on decompression errors.
677
678 * Autotools-based build system (configure):
679
680 - Symbol versioning variant can now be overridden with
681 --enable-symbol-versions. Documentation in INSTALL was
682 updated to match.
683
684 CMake:
685
686 - Linux on MicroBlaze is handled specially now. This matches
687 the changes made to the Autotools-based build in XZ Utils
688 5.4.2 and 5.2.11.
689
690 - Disable symbol versioning on non-glibc Linux to match what
691 the Autotools build does. For example, symbol versioning
692 isn't enabled with musl.
693
694 - Symbol versioning variant can now be overridden by setting
695 SYMBOL_VERSIONING to "OFF", "generic", or "linux".
696
697 * Documentation:
698
699 - Clarify the description of --disable-assembler in INSTALL.
700 The option only affects 32-bit x86 assembly usage.
701
702 - Add doc/examples/11_file_info.c. It was added to the
703 Git repository in 2017 but forgotten to be added into
704 distribution tarballs.
705
706 - Don't install the TODO file as part of the documentation.
707 The file is out of date.
708
709 - Update home page URLs back to their old locations on
710 tukaani.org.
711
712 - Update maintainer info.
713
714
715 5.4.6 (2024-01-26)
716
717 * Fixed a bug involving internal function pointers in liblzma not
718 being initialized to NULL. The bug can only be triggered if
719 lzma_filters_update() is called on a LZMA1 encoder, so it does
720 not affect xz or any application known to us that uses liblzma.
721
722 * xz:
723
724 - Fixed a regression introduced in 5.4.2 that caused encoding
725 in the raw format to unnecessarily fail if --suffix was not
726 used. For instance, the following command no longer reports
727 that --suffix must be used:
728
729 echo foo | xz --format=raw --lzma2 | wc -c
730
731 - Fixed an issue on MinGW-w64 builds that prevented reading
732 from or writing to non-terminal character devices like NUL.
733
734 * Added a new test.
735
736
737 5.4.5 (2023-11-01)
738
739 * liblzma:
740
741 - Use __attribute__((__no_sanitize_address__)) to avoid address
742 sanitization with CRC64 CLMUL. It uses 16-byte-aligned reads
743 which can extend past the bounds of the input buffer and
744 inherently trigger address sanitization errors. This isn't
745 a bug.
746
747 - Fixed an assertion failure that could be triggered by a large
748 unpadded_size argument. It was verified that there was no
749 other bug than the assertion failure.
750
751 - Fixed a bug that prevented building with Windows Vista
752 threading when __attribute__((__constructor__)) is not
753 supported.
754
755 * xz now properly handles special files such as "con" or "nul" on
756 Windows. Before this fix, the following wrote "foo" to the
757 console and deleted the input file "con_xz":
758
759 echo foo | xz > con_xz
760 xz --suffix=_xz --decompress con_xz
761
762 * Build systems:
763
764 - Allow builds with Windows win95 threading and small mode when
765 __attribute__((__constructor__)) is supported.
766
767 - Added a new line to liblzma.pc for MSYS2 (Windows):
768
769 Cflags.private: -DLZMA_API_STATIC
770
771 When compiling code that will link against static liblzma,
772 the LZMA_API_STATIC macro needs to be defined on Windows.
773
774 - CMake specific changes:
775
776 * Fixed a bug that allowed CLOCK_MONOTONIC to be used even
777 if the check for it failed.
778
779 * Fixed a bug where configuring CMake multiple times
780 resulted in HAVE_CLOCK_GETTIME and HAVE_CLOCK_MONOTONIC
781 not being set.
782
783 * Fixed the build with MinGW-w64-based Clang/LLVM 17.
784 llvm-windres now has more accurate GNU windres emulation
785 so the GNU windres workaround from 5.4.1 is needed with
786 llvm-windres version 17 too.
787
788 * The import library on Windows is now properly named
789 "liblzma.dll.a" instead of "libliblzma.dll.a"
790
791 * Fixed a bug causing the Ninja Generator to fail on
792 UNIX-like systems. This bug was introduced in 5.4.0.
793
794 * Added a new option to disable CLMUL CRC64.
795
796 * A module-definition (.def) file is now created when
797 building liblzma.dll with MinGW-w64.
798
799 * The pkg-config liblzma.pc file is now installed on all
800 builds except when using MSVC on Windows.
801
802 * Added large file support by default for platforms that
803 need it to handle files larger than 2 GiB. This includes
804 MinGW-w64, even 64-bit builds.
805
806 * Small fixes and improvements to the tests.
807
808 * Updated translations: Chinese (simplified) and Esperanto.
809
810
811 5.4.4 (2023-08-02)
812
813 * liblzma and xzdec can now build against WASI SDK when threading
814 support is disabled. xz and tests don't build yet.
815
816 * CMake:
817
818 - Fixed a bug preventing other projects from including liblzma
819 multiple times using find_package().
820
821 - Don't create broken symlinks in Cygwin and MSYS2 unless
822 supported by the environment. This prevented building for the
823 default MSYS2 environment. The problem was introduced in
824 xz 5.4.0.
825
826 * Documentation:
827
828 - Small improvements to man pages.
829
830 - Small improvements and typo fixes for liblzma API
831 documentation.
832
833 * Tests:
834
835 - Added a new section to INSTALL to describe basic test usage
836 and address recent questions about building the tests when
837 cross compiling.
838
839 - Small fixes and improvements to the tests.
840
841 * Translations:
842
843 - Fixed a mistake that caused one of the error messages to not
844 be translated. This only affected versions 5.4.2 and 5.4.3.
845
846 - Updated the Chinese (simplified), Croatian, Esperanto, German,
847 Korean, Polish, Romanian, Spanish, Swedish, Ukrainian, and
848 Vietnamese translations.
849
850 - Updated the German, Korean, Romanian, and Ukrainian man page
851 translations.
852
853
854 5.4.3 (2023-05-04)
855
856 * All fixes from 5.2.12
857
858 * Features in the CMake build can now be disabled as CMake cache
859 variables, similar to the Autotools build.
860
861 * Minor update to the Croatian translation.
862
863
864 5.4.2 (2023-03-18)
865
866 * All fixes from 5.2.11 that were not included in 5.4.1.
867
868 * If xz is built with support for the Capsicum sandbox but running
869 in an environment that doesn't support Capsicum, xz now runs
870 normally without sandboxing instead of exiting with an error.
871
872 * liblzma:
873
874 - Documentation was updated to improve the style, consistency,
875 and completeness of the liblzma API headers.
876
877 - The Doxygen-generated HTML documentation for the liblzma API
878 header files is now included in the source release and is
879 installed as part of "make install". All JavaScript is
880 removed to simplify license compliance and to reduce the
881 install size.
882
883 - Fixed a minor bug in lzma_str_from_filters() that produced
884 too many filters in the output string instead of reporting
885 an error if the input array had more than four filters. This
886 bug did not affect xz.
887
888 * Build systems:
889
890 - autogen.sh now invokes the doxygen tool via the new wrapper
891 script doxygen/update-doxygen, unless the command line option
892 --no-doxygen is used.
893
894 - Added microlzma_encoder.c and microlzma_decoder.c to the
895 VS project files for Windows and to the CMake build. These
896 should have been included in 5.3.2alpha.
897
898 * Tests:
899
900 - Added a test to the CMake build that was forgotten in the
901 previous release.
902
903 - Added and refactored a few tests.
904
905 * Translations:
906
907 - Updated the Brazilian Portuguese translation.
908
909 - Added Brazilian Portuguese man page translation.
910
911
912 5.4.1 (2023-01-11)
913
914 * liblzma:
915
916 - Fixed the return value of lzma_microlzma_encoder() if the
917 LZMA options lc/lp/pb are invalid. Invalid lc/lp/pb options
918 made the function return LZMA_STREAM_END without encoding
919 anything instead of returning LZMA_OPTIONS_ERROR.
920
921 - Windows / Visual Studio: Workaround a possible compiler bug
922 when targeting 32-bit x86 and compiling the CLMUL version of
923 the CRC64 code. The CLMUL code isn't enabled by the Windows
924 project files but it is in the CMake-based builds.
925
926 * Build systems:
927
928 - Windows-specific CMake changes:
929
930 * Don't try to enable CLMUL CRC64 code if _mm_set_epi64x()
931 isn't available. This fixes CMake-based build with Visual
932 Studio 2013.
933
934 * Created a workaround for a build failure with windres
935 from GNU binutils. It is used only when the C compiler
936 is GCC (not Clang). The workaround is incompatible
937 with llvm-windres, resulting in "XZx20Utils" instead
938 of "XZ Utils" in the resource file, but without the
939 workaround llvm-windres works correctly. See the
940 comment in CMakeLists.txt for details.
941
942 * Included the resource files in the xz and xzdec build
943 rules. Building the command line tools is still
944 experimental but possible with MinGW-w64.
945
946 - Visual Studio: Added stream_decoder_mt.c to the project
947 files. Now the threaded decompressor lzma_stream_decoder_mt()
948 gets built. CMake-based build wasn't affected.
949
950 - Updated windows/INSTALL-MSVC.txt to mention that CMake-based
951 build is now the preferred method with Visual Studio. The
952 project files will probably be removed after 5.4.x releases.
953
954 - Changes to #defines in config.h:
955
956 * HAVE_DECL_CLOCK_MONOTONIC was replaced by
957 HAVE_CLOCK_MONOTONIC. The old macro was always defined
958 in configure-generated config.h to either 0 or 1. The
959 new macro is defined (to 1) only if the declaration of
960 CLOCK_MONOTONIC is available. This matches the way most
961 other config.h macros work and makes things simpler with
962 other build systems.
963
964 * HAVE_DECL_PROGRAM_INVOCATION_NAME was replaced by
965 HAVE_PROGRAM_INVOCATION_NAME for the same reason.
966
967 * Tests:
968
969 - Fixed test script compatibility with ancient /bin/sh
970 versions. Now the five test_compress_* tests should
971 no longer fail on Solaris 10.
972
973 - Added and refactored a few tests.
974
975 * Translations:
976
977 - Updated the Catalan and Esperanto translations.
978
979 - Added Korean and Ukrainian man page translations.
980
981
982 5.4.0 (2022-12-13)
983
984 This bumps the minor version of liblzma because new features were
985 added. The API and ABI are still backward compatible with liblzma
986 5.2.x and 5.0.x.
987
988 Since 5.3.5beta:
989
990 * All fixes from 5.2.10.
991
992 * The ARM64 filter is now stable. The xz option is now --arm64.
993 Decompression requires XZ Utils 5.4.0. In the future the ARM64
994 filter will be supported by XZ for Java, XZ Embedded (including
995 the version in Linux), LZMA SDK, and 7-Zip.
996
997 * Translations:
998
999 - Updated Catalan, Croatian, German, Romanian, and Turkish
1000 translations.
1001
1002 - Updated German man page translations.
1003
1004 - Added Romanian man page translations.
1005
1006 Summary of new features added in the 5.3.x development releases:
1007
1008 * liblzma:
1009
1010 - Added threaded .xz decompressor lzma_stream_decoder_mt().
1011 It can use multiple threads with .xz files that have multiple
1012 Blocks with size information in Block Headers. The threaded
1013 encoder in xz has always created such files.
1014
1015 Single-threaded encoder cannot store the size information in
1016 Block Headers even if one used LZMA_FULL_FLUSH to create
1017 multiple Blocks, so this threaded decoder cannot use multiple
1018 threads with such files.
1019
1020 If there are multiple Streams (concatenated .xz files), one
1021 Stream will be decompressed completely before starting the
1022 next Stream.
1023
1024 - A new decoder flag LZMA_FAIL_FAST was added. It makes the
1025 threaded decompressor report errors soon instead of first
1026 flushing all pending data before the error location.
1027
1028 - New Filter IDs:
1029 * LZMA_FILTER_ARM64 is for ARM64 binaries.
1030 * LZMA_FILTER_LZMA1EXT is for raw LZMA1 streams that don't
1031 necessarily use the end marker.
1032
1033 - Added lzma_str_to_filters(), lzma_str_from_filters(), and
1034 lzma_str_list_filters() to convert a preset or a filter chain
1035 string to a lzma_filter[] and vice versa. These should make
1036 it easier to write applications that allow users to specify
1037 custom compression options.
1038
1039 - Added lzma_filters_free() which can be convenient for freeing
1040 the filter options in a filter chain (an array of lzma_filter
1041 structures).
1042
1043 - lzma_file_info_decoder() to makes it a little easier to get
1044 the Index field from .xz files. This helps in getting the
1045 uncompressed file size but an easy-to-use random access
1046 API is still missing which has existed in XZ for Java for
1047 a long time.
1048
1049 - Added lzma_microlzma_encoder() and lzma_microlzma_decoder().
1050 It is used by erofs-utils and may be used by others too.
1051
1052 The MicroLZMA format is a raw LZMA stream (without end marker)
1053 whose first byte (always 0x00) has been replaced with
1054 bitwise-negation of the LZMA properties (lc/lp/pb). It was
1055 created for use in EROFS but may be used in other contexts
1056 as well where it is important to avoid wasting bytes for
1057 stream headers or footers. The format is also supported by
1058 XZ Embedded (the XZ Embedded version in Linux got MicroLZMA
1059 support in Linux 5.16).
1060
1061 The MicroLZMA encoder API in liblzma can compress into a
1062 fixed-sized output buffer so that as much data is compressed
1063 as can be fit into the buffer while still creating a valid
1064 MicroLZMA stream. This is needed for EROFS.
1065
1066 - Added lzma_lzip_decoder() to decompress the .lz (lzip) file
1067 format version 0 and the original unextended version 1 files.
1068 Also lzma_auto_decoder() supports .lz files.
1069
1070 - lzma_filters_update() can now be used with the multi-threaded
1071 encoder (lzma_stream_encoder_mt()) to change the filter chain
1072 after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH.
1073
1074 - In lzma_options_lzma, allow nice_len = 2 and 3 with the match
1075 finders that require at least 3 or 4. Now it is internally
1076 rounded up if needed.
1077
1078 - CLMUL-based CRC64 on x86-64 and E2K with runtime processor
1079 detection. On 32-bit x86 it currently isn't available unless
1080 --disable-assembler is used which can make the non-CLMUL
1081 CRC64 slower; this might be fixed in the future.
1082
1083 - Building with --disable-threads --enable-small
1084 is now thread-safe if the compiler supports
1085 __attribute__((__constructor__)).
1086
1087 * xz:
1088
1089 - Using -T0 (--threads=0) will now use multi-threaded encoder
1090 even on a single-core system. This is to ensure that output
1091 from the same xz binary is identical on both single-core and
1092 multi-core systems.
1093
1094 - --threads=+1 or -T+1 is now a way to put xz into
1095 multi-threaded mode while using only one worker thread.
1096 The + is ignored if the number is not 1.
1097
1098 - A default soft memory usage limit is now used for compression
1099 when -T0 is used and no explicit limit has been specified.
1100 This soft limit is used to restrict the number of threads
1101 but if the limit is exceeded with even one thread then xz
1102 will continue with one thread using the multi-threaded
1103 encoder and this limit is ignored. If the number of threads
1104 is specified manually then no default limit will be used;
1105 this affects only -T0.
1106
1107 This change helps on systems that have very many cores and
1108 using all of them for xz makes no sense. Previously xz -T0
1109 could run out of memory on such systems because it attempted
1110 to reserve memory for too many threads.
1111
1112 This also helps with 32-bit builds which don't have a large
1113 amount of address space that would be required for many
1114 threads. The default soft limit for -T0 is at most 1400 MiB
1115 on all 32-bit platforms.
1116
1117 - Previously a low value in --memlimit-compress wouldn't cause
1118 xz to switch from multi-threaded mode to single-threaded mode
1119 if the limit cannot otherwise be met; xz failed instead. Now
1120 xz can switch to single-threaded mode and then, if needed,
1121 scale down the LZMA2 dictionary size too just like it already
1122 did when it was started in single-threaded mode.
1123
1124 - The option --no-adjust no longer prevents xz from scaling down
1125 the number of threads as that doesn't affect the compressed
1126 output (only performance). Now --no-adjust only prevents
1127 adjustments that affect compressed output, that is, with
1128 --no-adjust xz won't switch from multi-threaded mode to
1129 single-threaded mode and won't scale down the LZMA2
1130 dictionary size.
1131
1132 - Added a new option --memlimit-mt-decompress=LIMIT. This is
1133 used to limit the number of decompressor threads (possibly
1134 falling back to single-threaded mode) but it will never make
1135 xz refuse to decompress a file. This has a system-specific
1136 default value because without any limit xz could end up
1137 allocating memory for the whole compressed input file, the
1138 whole uncompressed output file, multiple thread-specific
1139 decompressor instances and so on. Basically xz could
1140 attempt to use an insane amount of memory even with fairly
1141 common files. The system-specific default value is currently
1142 the same as the one used for compression with -T0.
1143
1144 The new option works together with the existing option
1145 --memlimit-decompress=LIMIT. The old option sets a hard limit
1146 that must not be exceeded (xz will refuse to decompress)
1147 while the new option only restricts the number of threads.
1148 If the limit set with --memlimit-mt-decompress is greater
1149 than the limit set with --memlimit-compress, then the latter
1150 value is used also for --memlimit-mt-decompress.
1151
1152 - Added new information to the output of xz --info-memory and
1153 new fields to the output of xz --robot --info-memory.
1154
1155 - In --lzma2=nice=NUMBER allow 2 and 3 with all match finders
1156 now that liblzma handles it.
1157
1158 - Don't mention endianness for ARM and ARM-Thumb filters in
1159 --long-help. The filters only work for little endian
1160 instruction encoding but modern ARM processors using
1161 big endian data access still use little endian
1162 instruction encoding. So the help text was misleading.
1163 In contrast, the PowerPC filter is only for big endian
1164 32/64-bit PowerPC code. Little endian PowerPC would need
1165 a separate filter.
1166
1167 - Added decompression support for the .lz (lzip) file format
1168 version 0 and the original unextended version 1. It is
1169 autodetected by default. See also the option --format on
1170 the xz man page.
1171
1172 - Sandboxing enabled by default:
1173 * Capsicum (FreeBSD)
1174 * pledge(2) (OpenBSD)
1175
1176 * Scripts now support the .lz format using xz.
1177
1178 * A few new tests were added.
1179
1180 * The liblzma-specific tests are now supported in CMake-based
1181 builds too ("make test").
1182
1183
1184 5.3.5beta (2022-12-01)
1185
1186 * All fixes from 5.2.9.
1187
1188 * liblzma:
1189
1190 - Added new LZMA_FILTER_LZMA1EXT for raw encoder and decoder to
1191 handle raw LZMA1 streams that don't have end of payload marker
1192 (EOPM) alias end of stream (EOS) marker. It can be used in
1193 filter chains, for example, with the x86 BCJ filter.
1194
1195 - Added lzma_str_to_filters(), lzma_str_from_filters(), and
1196 lzma_str_list_filters() to make it easier for applications
1197 to get custom compression options from a user and convert
1198 it to an array of lzma_filter structures.
1199
1200 - Added lzma_filters_free().
1201
1202 - lzma_filters_update() can now be used with the multi-threaded
1203 encoder (lzma_stream_encoder_mt()) to change the filter chain
1204 after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH.
1205
1206 - In lzma_options_lzma, allow nice_len = 2 and 3 with the match
1207 finders that require at least 3 or 4. Now it is internally
1208 rounded up if needed.
1209
1210 - ARM64 filter was modified. It is still experimental.
1211
1212 - Fixed LTO build with Clang if -fgnuc-version=10 or similar
1213 was used to make Clang look like GCC >= 10. Now it uses
1214 __has_attribute(__symver__) which should be reliable.
1215
1216 * xz:
1217
1218 - --threads=+1 or -T+1 is now a way to put xz into multi-threaded
1219 mode while using only one worker thread.
1220
1221 - In --lzma2=nice=NUMBER allow 2 and 3 with all match finders
1222 now that liblzma handles it.
1223
1224 * Updated translations: Chinese (simplified), Korean, and Turkish.
1225
1226
1227 5.3.4alpha (2022-11-15)
1228
1229 * All fixes from 5.2.7 and 5.2.8.
1230
1231 * liblzma:
1232
1233 - Minor improvements to the threaded decoder.
1234
1235 - Added CRC64 implementation that uses SSSE3, SSE4.1, and CLMUL
1236 instructions on 32/64-bit x86 and E2K. On 32-bit x86 it's
1237 not enabled unless --disable-assembler is used but then
1238 the non-CLMUL code might be slower. Processor support is
1239 detected at runtime so this is built by default on x86-64
1240 and E2K. On these platforms, if compiler flags indicate
1241 unconditional CLMUL support (-msse4.1 -mpclmul) then the
1242 generic version is not built, making liblzma 8-9 KiB smaller
1243 compared to having both versions included.
1244
1245 With extremely compressible files this can make decompression
1246 up to twice as fast but with typical files 5 % improvement
1247 is a more realistic expectation.
1248
1249 The CLMUL version is slower than the generic version with
1250 tiny inputs (especially at 1-8 bytes per call, but up to
1251 16 bytes). In normal use in xz this doesn't matter at all.
1252
1253 - Added an experimental ARM64 filter. This is *not* the final
1254 version! Files created with this experimental version won't
1255 be supported in the future versions! The filter design is
1256 a compromise where improving one use case makes some other
1257 cases worse.
1258
1259 - Added decompression support for the .lz (lzip) file format
1260 version 0 and the original unextended version 1. See the
1261 API docs of lzma_lzip_decoder() for details. Also
1262 lzma_auto_decoder() supports .lz files.
1263
1264 - Building with --disable-threads --enable-small
1265 is now thread-safe if the compiler supports
1266 __attribute__((__constructor__))
1267
1268 * xz:
1269
1270 - Added support for OpenBSD's pledge(2) as a sandboxing method.
1271
1272 - Don't mention endianness for ARM and ARM-Thumb filters in
1273 --long-help. The filters only work for little endian
1274 instruction encoding but modern ARM processors using
1275 big endian data access still use little endian
1276 instruction encoding. So the help text was misleading.
1277 In contrast, the PowerPC filter is only for big endian
1278 32/64-bit PowerPC code. Little endian PowerPC would need
1279 a separate filter.
1280
1281 - Added --experimental-arm64. This will be renamed once the
1282 filter is finished. Files created with this experimental
1283 filter will not be supported in the future!
1284
1285 - Added new fields to the output of xz --robot --info-memory.
1286
1287 - Added decompression support for the .lz (lzip) file format
1288 version 0 and the original unextended version 1. It is
1289 autodetected by default. See also the option --format on
1290 the xz man page.
1291
1292 * Scripts now support the .lz format using xz.
1293
1294 * Build systems:
1295
1296 - New #defines in config.h: HAVE_ENCODER_ARM64,
1297 HAVE_DECODER_ARM64, HAVE_LZIP_DECODER, HAVE_CPUID_H,
1298 HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR, HAVE_USABLE_CLMUL
1299
1300 - New configure options: --disable-clmul-crc,
1301 --disable-microlzma, --disable-lzip-decoder, and
1302 'pledge' is now an option in --enable-sandbox (but
1303 it's autodetected by default anyway).
1304
1305 - INSTALL was updated to document the new configure options.
1306
1307 - PACKAGERS now lists also --disable-microlzma and
1308 --disable-lzip-decoder as configure options that must
1309 not be used in builds for non-embedded use.
1310
1311 * Tests:
1312
1313 - Fix some of the tests so that they skip instead of fail if
1314 certain features have been disabled with configure options.
1315 It's still not perfect.
1316
1317 - Other improvements to tests.
1318
1319 * Updated translations: Croatian, Finnish, Hungarian, Polish,
1320 Romanian, Spanish, Swedish, and Ukrainian.
1321
1322
1323 5.3.3alpha (2022-08-22)
1324
1325 * All fixes from 5.2.6.
1326
1327 * liblzma:
1328
1329 - Fixed 32-bit build.
1330
1331 - Added threaded .xz decompressor lzma_stream_decoder_mt().
1332 It can use multiple threads with .xz files that have multiple
1333 Blocks with size information in Block Headers. The threaded
1334 encoder in xz has always created such files.
1335
1336 Single-threaded encoder cannot store the size information in
1337 Block Headers even if one used LZMA_FULL_FLUSH to create
1338 multiple Blocks, so this threaded decoder cannot use multiple
1339 threads with such files.
1340
1341 If there are multiple Streams (concatenated .xz files), one
1342 Stream will be decompressed completely before starting the
1343 next Stream.
1344
1345 - A new decoder flag LZMA_FAIL_FAST was added. It makes the
1346 threaded decompressor report errors soon instead of first
1347 flushing all pending data before the error location.
1348
1349 * xz:
1350
1351 - Using -T0 (--threads=0) will now use multi-threaded encoder
1352 even on a single-core system. This is to ensure that output
1353 from the same xz binary is identical on both single-core and
1354 multi-core systems.
1355
1356 - A default soft memory usage limit is now used for compression
1357 when -T0 is used and no explicit limit has been specified.
1358 This soft limit is used to restrict the number of threads
1359 but if the limit is exceeded with even one thread then xz
1360 will continue with one thread using the multi-threaded
1361 encoder and this limit is ignored. If the number of threads
1362 is specified manually then no default limit will be used;
1363 this affects only -T0.
1364
1365 This change helps on systems that have very many cores and
1366 using all of them for xz makes no sense. Previously xz -T0
1367 could run out of memory on such systems because it attempted
1368 to reserve memory for too many threads.
1369
1370 This also helps with 32-bit builds which don't have a large
1371 amount of address space that would be required for many
1372 threads. The default limit is 1400 MiB on all 32-bit
1373 platforms with -T0.
1374
1375 Now xz -T0 should just work. It might use too few threads
1376 in some cases but at least it shouldn't easily run out of
1377 memory. It's possible that this will be tweaked before 5.4.0.
1378
1379 - Changes to --memlimit-compress and --no-adjust:
1380
1381 In single-threaded mode, --memlimit-compress can make xz
1382 scale down the LZMA2 dictionary size to meet the memory usage
1383 limit. This obviously affects the compressed output. However,
1384 if xz was in threaded mode, --memlimit-compress could make xz
1385 reduce the number of threads but it wouldn't make xz switch
1386 from multi-threaded mode to single-threaded mode or scale
1387 down the LZMA2 dictionary size. This seemed illogical.
1388
1389 Now --memlimit-compress can make xz switch to single-threaded
1390 mode if one thread in multi-threaded mode uses too much
1391 memory. If memory usage is still too high, then the LZMA2
1392 dictionary size can be scaled down too.
1393
1394 The option --no-adjust was also changed so that it no longer
1395 prevents xz from scaling down the number of threads as that
1396 doesn't affect compressed output (only performance). After
1397 this commit --no-adjust only prevents adjustments that affect
1398 compressed output, that is, with --no-adjust xz won't switch
1399 from multithreaded mode to single-threaded mode and won't
1400 scale down the LZMA2 dictionary size.
1401
1402 - Added a new option --memlimit-mt-decompress=LIMIT. This is
1403 used to limit the number of decompressor threads (possibly
1404 falling back to single-threaded mode) but it will never make
1405 xz refuse to decompress a file. This has a system-specific
1406 default value because without any limit xz could end up
1407 allocating memory for the whole compressed input file, the
1408 whole uncompressed output file, multiple thread-specific
1409 decompressor instances and so on. Basically xz could
1410 attempt to use an insane amount of memory even with fairly
1411 common files.
1412
1413 The new option works together with the existing option
1414 --memlimit-decompress=LIMIT. The old option sets a hard limit
1415 that must not be exceeded (xz will refuse to decompress)
1416 while the new option only restricts the number of threads.
1417 If the limit set with --memlimit-mt-decompress is greater
1418 than the limit set with --memlimit-compress, then the latter
1419 value is used also for --memlimit-mt-decompress.
1420
1421 * Tests:
1422
1423 - Added a few more tests.
1424
1425 - Added tests/code_coverage.sh to create a code coverage report
1426 of the tests.
1427
1428 * Build systems:
1429
1430 - Automake's parallel test harness is now used to make tests
1431 finish faster.
1432
1433 - Added the CMake files to the distribution tarball. These were
1434 supposed to be in 5.2.5 already.
1435
1436 - Added liblzma tests to the CMake build.
1437
1438 - Windows: Fix building of liblzma.dll with the included
1439 Visual Studio project files.
1440
1441
1442 5.3.2alpha (2021-10-28)
1443
1444 This release was made on short notice so that recent erofs-utils can
1445 be built with LZMA support without needing a snapshot from xz.git.
1446 Thus many pending things were not included, not even updated
1447 translations (which would need to be updated for the new --list
1448 strings anyway).
1449
1450 * All fixes from 5.2.5.
1451
1452 * xz:
1453
1454 - When copying metadata from the source file to the destination
1455 file, don't try to set the group (GID) if it is already set
1456 correctly. This avoids a failure on OpenBSD (and possibly on
1457 a few other OSes) where files may get created so that their
1458 group doesn't belong to the user, and fchown(2) can fail even
1459 if it needs to do nothing.
1460
1461 - The --keep option now accepts symlinks, hardlinks, and
1462 setuid, setgid, and sticky files. Previously this required
1463 using --force.
1464
1465 - Split the long strings used in --list and --info-memory modes
1466 to make them much easier for translators.
1467
1468 - If built with sandbox support and enabling the sandbox fails,
1469 xz will now immediately exit with exit status of 1. Previously
1470 it would only display a warning if -vv was used.
1471
1472 - Cap --memlimit-compress to 2000 MiB on MIPS32 because on
1473 MIPS32 userspace processes are limited to 2 GiB of address
1474 space.
1475
1476 * liblzma:
1477
1478 - Added lzma_microlzma_encoder() and lzma_microlzma_decoder().
1479 The API is in lzma/container.h.
1480
1481 The MicroLZMA format is a raw LZMA stream (without end marker)
1482 whose first byte (always 0x00) has been replaced with
1483 bitwise-negation of the LZMA properties (lc/lp/pb). It was
1484 created for use in EROFS but may be used in other contexts
1485 as well where it is important to avoid wasting bytes for
1486 stream headers or footers. The format is also supported by
1487 XZ Embedded.
1488
1489 The MicroLZMA encoder API in liblzma can compress into a
1490 fixed-sized output buffer so that as much data is compressed
1491 as can be fit into the buffer while still creating a valid
1492 MicroLZMA stream. This is needed for EROFS.
1493
1494 - Added fuzzing support.
1495
1496 - Support Intel Control-flow Enforcement Technology (CET) in
1497 32-bit x86 assembly files.
1498
1499 - Visual Studio: Use non-standard _MSVC_LANG to detect C++
1500 standard version in the lzma.h API header. It's used to
1501 detect when "noexcept" can be used.
1502
1503 * Scripts:
1504
1505 - Fix exit status of xzdiff/xzcmp. Exit status could be 2 when
1506 the correct value is 1.
1507
1508 - Fix exit status of xzgrep.
1509
1510 - Detect corrupt .bz2 files in xzgrep.
1511
1512 - Add zstd support to xzgrep and xzdiff/xzcmp.
1513
1514 - Fix less(1) version detection in xzless. It failed if the
1515 version number from "less -V" contained a dot.
1516
1517 * Fix typos and technical issues in man pages.
1518
1519 * Build systems:
1520
1521 - Windows: Fix building of resource files when config.h isn't
1522 used. CMake + Visual Studio can now build liblzma.dll.
1523
1524 - Various fixes to the CMake support. It might still need a few
1525 more fixes even for liblzma-only builds.
1526
1527
1528 5.3.1alpha (2018-04-29)
1529
1530 * All fixes from 5.2.4.
1531
1532 * Add lzma_file_info_decoder() into liblzma and use it in xz to
1533 implement the --list feature.
1534
1535 * Capsicum sandbox support is enabled by default where available
1536 (FreeBSD >= 10).
1537
1538
1539 5.2.13 (2024-05-29)
1540
1541 * liblzma:
1542
1543 - lzma_index_append(): Fix an assertion failure that could be
1544 triggered by a large unpadded_size argument. It was verified
1545 that there was no other bug than the assertion failure.
1546
1547 - lzma_index_decoder() and lzma_index_buffer_decode(): Fix
1548 a missing output pointer initialization (*i = NULL) if the
1549 functions are called with invalid arguments. The API docs
1550 say that such an initialization is always done. In practice
1551 this matters very little because the problem can only occur
1552 if the calling application has a bug and these functions
1553 return LZMA_PROG_ERROR.
1554
1555 - Fix C standard conformance with function pointer types.
1556 This newly showed up with Clang 17 with -fsanitize=undefined.
1557 There are no bug reports about this.
1558
1559 - Fix building with NVIDIA HPC SDK.
1560
1561 - Fix building with Windows Vista threads and --enable-small.
1562 (CMake build doesn't support ENABLE_SMALL in XZ Utils 5.2.x.)
1563
1564 * xz:
1565
1566 - Fix a C standard conformance issue in --block-list parsing
1567 (arithmetic on a null pointer).
1568
1569 - Fix a warning from GNU groff when processing the man page:
1570 "warning: cannot select font 'CW'"
1571
1572 - Windows: Handle special files such as "con" or "nul". Earlier
1573 the following wrote "foo" to the console and deleted the input
1574 file "con_xz":
1575
1576 echo foo | xz > con_xz
1577 xz --suffix=_xz --decompress con_xz
1578
1579 - Windows: Fix an issue that prevented reading from or writing
1580 to non-terminal character devices like NUL.
1581
1582 * xzless:
1583
1584 - With "less" version 451 and later, use "||-" instead of "|-"
1585 in the environment variable LESSOPEN. This way compressed
1586 files that contain no uncompressed data are shown correctly
1587 as empty.
1588
1589 - With "less" version 632 and later, use --show-preproc-errors
1590 to make "less" show a warning on decompression errors.
1591
1592 * Build systems:
1593
1594 - Add a new line to liblzma.pc for MSYS2 (Windows):
1595
1596 Cflags.private: -DLZMA_API_STATIC
1597
1598 When compiling code that will link against static liblzma,
1599 the LZMA_API_STATIC macro needs to be defined on Windows.
1600
1601 - Autotools (configure):
1602
1603 * Symbol versioning variant can now be overridden with
1604 --enable-symbol-versions. Documentation in INSTALL was
1605 updated to match.
1606
1607 - CMake:
1608
1609 * Fix a bug that prevented other projects from including
1610 liblzma multiple times using find_package().
1611
1612 * Fix a bug where configuring CMake multiple times resulted
1613 in HAVE_CLOCK_GETTIME and HAVE_CLOCK_MONOTONIC not being
1614 defined.
1615
1616 * Fix the build with MinGW-w64-based Clang/LLVM 17.
1617 llvm-windres now has more accurate GNU windres emulation
1618 so the GNU windres workaround from 5.4.1 is needed with
1619 llvm-windres version 17 too.
1620
1621 * The import library on Windows is now properly named
1622 "liblzma.dll.a" instead of "libliblzma.dll.a"
1623
1624 * Add large file support by default for platforms that
1625 need it to handle files larger than 2 GiB. This includes
1626 MinGW-w64, even 64-bit builds.
1627
1628 * Linux on MicroBlaze is handled specially now. This
1629 matches the changes made to the Autotools-based build
1630 in XZ Utils 5.4.2 and 5.2.11.
1631
1632 * Disable symbol versioning on non-glibc Linux to match
1633 what the Autotools build does. For example, symbol
1634 versioning isn't enabled with musl.
1635
1636 * Symbol versioning variant can now be overridden by
1637 setting SYMBOL_VERSIONING to "OFF", "generic", or
1638 "linux".
1639
1640 * Documentation:
1641
1642 - Clarify the description of --disable-assembler in INSTALL.
1643 The option only affects 32-bit x86 assembly usage.
1644
1645 - Don't install the TODO file as part of the documentation.
1646 The file is out of date.
1647
1648 - Update home page URLs back to their old locations on
1649 tukaani.org.
1650
1651 - Update maintainer info.
1652
1653
1654 5.2.12 (2023-05-04)
1655
1656 * Fixed a build system bug that prevented building liblzma as a
1657 shared library when configured with --disable-threads. This bug
1658 affected releases 5.2.6 to 5.2.11 and 5.4.0 to 5.4.2.
1659
1660 * Include <intrin.h> for Windows intrinsic functions where they are
1661 needed. This fixed a bug that prevented building liblzma using
1662 clang-cl on Windows.
1663
1664 * Minor update to the Croatian translation. The small change
1665 applies to a string in both 5.2 and 5.4 branches.
1666
1667
1668 5.2.11 (2023-03-18)
1669
1670 * Removed all possible cases of null pointer + 0. It is undefined
1671 behavior in C99 and C17. This was detected by a sanitizer and had
1672 not caused any known issues.
1673
1674 * Build systems:
1675
1676 - Added a workaround for building with GCC on MicroBlaze Linux.
1677 GCC 12 on MicroBlaze doesn't support the __symver__ attribute
1678 even though __has_attribute(__symver__) returns true. The
1679 build is now done without the extra RHEL/CentOS 7 symbols
1680 that were added in XZ Utils 5.2.7. The workaround only
1681 applies to the Autotools build (not CMake).
1682
1683 - CMake: Ensure that the C compiler language is set to C99 or
1684 a newer standard.
1685
1686 - CMake changes from XZ Utils 5.4.1:
1687
1688 * Added a workaround for a build failure with
1689 windres from GNU binutils.
1690
1691 * Included the Windows resource files in the xz
1692 and xzdec build rules.
1693
1694
1695 5.2.10 (2022-12-13)
1696
1697 * xz: Don't modify argv[] when parsing the --memlimit* and
1698 --block-list command line options. This fixes confusing
1699 arguments in process listing (like "ps auxf").
1700
1701 * GNU/Linux only: Use __has_attribute(__symver__) to detect if
1702 that attribute is supported. This fixes build on Mandriva where
1703 Clang is patched to define __GNUC__ to 11 by default (instead
1704 of 4 as used by Clang upstream).
1705
1706
1707 5.2.9 (2022-11-30)
1708
1709 * liblzma:
1710
1711 - Fixed an infinite loop in LZMA encoder initialization
1712 if dict_size >= 2 GiB. (The encoder only supports up
1713 to 1536 MiB.)
1714
1715 - Fixed two cases of invalid free() that can happen if
1716 a tiny allocation fails in encoder re-initialization
1717 or in lzma_filters_update(). These bugs had some
1718 similarities with the bug fixed in 5.2.7.
1719
1720 - Fixed lzma_block_encoder() not allowing the use of
1721 LZMA_SYNC_FLUSH with lzma_code() even though it was
1722 documented to be supported. The sync-flush code in
1723 the Block encoder was already used internally via
1724 lzma_stream_encoder(), so this was just a missing flag
1725 in the lzma_block_encoder() API function.
1726
1727 - GNU/Linux only: Don't put symbol versions into static
1728 liblzma as it breaks things in some cases (and even if
1729 it didn't break anything, symbol versions in static
1730 libraries are useless anyway). The downside of the fix
1731 is that if the configure options --with-pic or --without-pic
1732 are used then it's not possible to build both shared and
1733 static liblzma at the same time on GNU/Linux anymore;
1734 with those options --disable-static or --disable-shared
1735 must be used too.
1736
1737 * New email address for bug reports is <xz@tukaani.org> which
1738 forwards messages to Lasse Collin and Jia Tan.
1739
1740
1741 5.2.8 (2022-11-13)
1742
1743 * xz:
1744
1745 - If xz cannot remove an input file when it should, this
1746 is now treated as a warning (exit status 2) instead of
1747 an error (exit status 1). This matches GNU gzip and it
1748 is more logical as at that point the output file has
1749 already been successfully closed.
1750
1751 - Fix handling of .xz files with an unsupported check type.
1752 Previously such printed a warning message but then xz
1753 behaved as if an error had occurred (didn't decompress,
1754 exit status 1). Now a warning is printed, decompression
1755 is done anyway, and exit status is 2. This used to work
1756 slightly before 5.0.0. In practice this bug matters only
1757 if xz has been built with some check types disabled. As
1758 instructed in PACKAGERS, such builds should be done in
1759 special situations only.
1760
1761 - Fix "xz -dc --single-stream tests/files/good-0-empty.xz"
1762 which failed with "Internal error (bug)". That is,
1763 --single-stream was broken if the first .xz stream in
1764 the input file didn't contain any uncompressed data.
1765
1766 - Fix displaying file sizes in the progress indicator when
1767 working in passthru mode and there are multiple input files.
1768 Just like "gzip -cdf", "xz -cdf" works like "cat" when the
1769 input file isn't a supported compressed file format. In
1770 this case the file size counters weren't reset between
1771 files so with multiple input files the progress indicator
1772 displayed an incorrect (too large) value.
1773
1774 * liblzma:
1775
1776 - API docs in lzma/container.h:
1777 * Update the list of decoder flags in the decoder
1778 function docs.
1779 * Explain LZMA_CONCATENATED behavior with .lzma files
1780 in lzma_auto_decoder() docs.
1781
1782 - OpenBSD: Use HW_NCPUONLINE to detect the number of
1783 available hardware threads in lzma_physmem().
1784
1785 - Fix use of wrong macro to detect x86 SSE2 support.
1786 __SSE2_MATH__ was used with GCC/Clang but the correct
1787 one is __SSE2__. The first one means that SSE2 is used
1788 for floating point math which is irrelevant here.
1789 The affected SSE2 code isn't used on x86-64 so this affects
1790 only 32-bit x86 builds that use -msse2 without -mfpmath=sse
1791 (there is no runtime detection for SSE2). It improves LZMA
1792 compression speed (not decompression).
1793
1794 - Fix the build with Intel C compiler 2021 (ICC, not ICX)
1795 on Linux. It defines __GNUC__ to 10 but doesn't support
1796 the __symver__ attribute introduced in GCC 10.
1797
1798 * Scripts: Ignore warnings from xz by using --quiet --no-warn.
1799 This is needed if the input .xz files use an unsupported
1800 check type.
1801
1802 * Translations:
1803
1804 - Updated Croatian and Turkish translations.
1805
1806 - One new translations wasn't included because it needed
1807 technical fixes. It will be in upcoming 5.4.0. No new
1808 translations will be added to the 5.2.x branch anymore.
1809
1810 - Renamed the French man page translation file from
1811 fr_FR.po to fr.po and thus also its install directory
1812 (like /usr/share/man/fr_FR -> .../fr).
1813
1814 - Man page translations for upcoming 5.4.0 are now handled
1815 in the Translation Project.
1816
1817 * Update doc/faq.txt a little so it's less out-of-date.
1818
1819
1820 5.2.7 (2022-09-30)
1821
1822 * liblzma:
1823
1824 - Made lzma_filters_copy() to never modify the destination
1825 array if an error occurs. lzma_stream_encoder() and
1826 lzma_stream_encoder_mt() already assumed this. Before this
1827 change, if a tiny memory allocation in lzma_filters_copy()
1828 failed it would lead to a crash (invalid free() or invalid
1829 memory reads) in the cleanup paths of these two encoder
1830 initialization functions.
1831
1832 - Added missing integer overflow check to lzma_index_append().
1833 This affects xz --list and other applications that decode
1834 the Index field from .xz files using lzma_index_decoder().
1835 Normal decompression of .xz files doesn't call this code
1836 and thus most applications using liblzma aren't affected
1837 by this bug.
1838
1839 - Single-threaded .xz decoder (lzma_stream_decoder()): If
1840 lzma_code() returns LZMA_MEMLIMIT_ERROR it is now possible
1841 to use lzma_memlimit_set() to increase the limit and continue
1842 decoding. This was supposed to work from the beginning
1843 but there was a bug. With other decoders (.lzma or
1844 threaded .xz decoder) this already worked correctly.
1845
1846 - Fixed accumulation of integrity check type statistics in
1847 lzma_index_cat(). This bug made lzma_index_checks() return
1848 only the type of the integrity check of the last Stream
1849 when multiple lzma_indexes were concatenated. Most
1850 applications don't use these APIs but in xz it made
1851 xz --list not list all check types from concatenated .xz
1852 files. In xz --list --verbose only the per-file "Check:"
1853 lines were affected and in xz --robot --list only the "file"
1854 line was affected.
1855
1856 - Added ABI compatibility with executables that were linked
1857 against liblzma in RHEL/CentOS 7 or other liblzma builds
1858 that had copied the problematic patch from RHEL/CentOS 7
1859 (xz-5.2.2-compat-libs.patch). For the details, see the
1860 comment at the top of src/liblzma/validate_map.sh.
1861
1862 WARNING: This uses __symver__ attribute with GCC >= 10.
1863 In other cases the traditional __asm__(".symver ...")
1864 is used. Using link-time optimization (LTO, -flto) with
1865 GCC versions older than 10 can silently result in
1866 broken liblzma.so.5 (incorrect symbol versions)! If you
1867 want to use -flto with GCC, you must use GCC >= 10.
1868 LTO with Clang seems to work even with the traditional
1869 __asm__(".symver ...") method.
1870
1871 * xzgrep: Fixed compatibility with old shells that break if
1872 comments inside command substitutions have apostrophes (').
1873 This problem was introduced in 5.2.6.
1874
1875 * Build systems:
1876
1877 - New #define in config.h: HAVE_SYMBOL_VERSIONS_LINUX
1878
1879 - Windows: Fixed liblzma.dll build with Visual Studio project
1880 files. It broke in 5.2.6 due to a change that was made to
1881 improve CMake support.
1882
1883 - Windows: Building liblzma with UNICODE defined should now
1884 work.
1885
1886 - CMake files are now actually included in the release tarball.
1887 They should have been in 5.2.5 already.
1888
1889 - Minor CMake fixes and improvements.
1890
1891 * Added a new translation: Turkish
1892
1893
1894 5.2.6 (2022-08-12)
1895
1896 * xz:
1897
1898 - The --keep option now accepts symlinks, hardlinks, and
1899 setuid, setgid, and sticky files. Previously this required
1900 using --force.
1901
1902 - When copying metadata from the source file to the destination
1903 file, don't try to set the group (GID) if it is already set
1904 correctly. This avoids a failure on OpenBSD (and possibly on
1905 a few other OSes) where files may get created so that their
1906 group doesn't belong to the user, and fchown(2) can fail even
1907 if it needs to do nothing.
1908
1909 - Cap --memlimit-compress to 2000 MiB instead of 4020 MiB on
1910 MIPS32 because on MIPS32 userspace processes are limited
1911 to 2 GiB of address space.
1912
1913 * liblzma:
1914
1915 - Fixed a missing error-check in the threaded encoder. If a
1916 small memory allocation fails, a .xz file with an invalid
1917 Index field would be created. Decompressing such a file would
1918 produce the correct output but result in an error at the end.
1919 Thus this is a "mild" data corruption bug. Note that while
1920 a failed memory allocation can trigger the bug, it cannot
1921 cause invalid memory access.
1922
1923 - The decoder for .lzma files now supports files that have
1924 uncompressed size stored in the header and still use the
1925 end of payload marker (end of stream marker) at the end
1926 of the LZMA stream. Such files are rare but, according to
1927 the documentation in LZMA SDK, they are valid.
1928 doc/lzma-file-format.txt was updated too.
1929
1930 - Improved 32-bit x86 assembly files:
1931 * Support Intel Control-flow Enforcement Technology (CET)
1932 * Use non-executable stack on FreeBSD.
1933
1934 - Visual Studio: Use non-standard _MSVC_LANG to detect C++
1935 standard version in the lzma.h API header. It's used to
1936 detect when "noexcept" can be used.
1937
1938 * xzgrep:
1939
1940 - Fixed arbitrary command injection via a malicious filename
1941 (CVE-2022-1271, ZDI-CAN-16587). A standalone patch for
1942 this was released to the public on 2022-04-07. A slight
1943 robustness improvement has been made since then and, if
1944 using GNU or *BSD grep, a new faster method is now used
1945 that doesn't use the old sed-based construct at all. This
1946 also fixes bad output with GNU grep >= 3.5 (2020-09-27)
1947 when xzgrepping binary files.
1948
1949 This vulnerability was discovered by:
1950 cleemy desu wayo working with Trend Micro Zero Day Initiative
1951
1952 - Fixed detection of corrupt .bz2 files.
1953
1954 - Improved error handling to fix exit status in some situations
1955 and to fix handling of signals: in some situations a signal
1956 didn't make xzgrep exit when it clearly should have. It's
1957 possible that the signal handling still isn't quite perfect
1958 but hopefully it's good enough.
1959
1960 - Documented exit statuses on the man page.
1961
1962 - xzegrep and xzfgrep now use "grep -E" and "grep -F" instead
1963 of the deprecated egrep and fgrep commands.
1964
1965 - Fixed parsing of the options -E, -F, -G, -P, and -X. The
1966 problem occurred when multiple options were specified in
1967 a single argument, for example,
1968
1969 echo foo | xzgrep -Fe foo
1970
1971 treated foo as a filename because -Fe wasn't correctly
1972 split into -F -e.
1973
1974 - Added zstd support.
1975
1976 * xzdiff/xzcmp:
1977
1978 - Fixed wrong exit status. Exit status could be 2 when the
1979 correct value is 1.
1980
1981 - Documented on the man page that exit status of 2 is used
1982 for decompression errors.
1983
1984 - Added zstd support.
1985
1986 * xzless:
1987
1988 - Fix less(1) version detection. It failed if the version number
1989 from "less -V" contained a dot.
1990
1991 * Translations:
1992
1993 - Added new translations: Catalan, Croatian, Esperanto,
1994 Korean, Portuguese, Romanian, Serbian, Spanish, Swedish,
1995 and Ukrainian
1996
1997 - Updated the Brazilian Portuguese translation.
1998
1999 - Added French man page translation. This and the existing
2000 German translation aren't complete anymore because the
2001 English man pages got a few updates and the translators
2002 weren't reached so that they could update their work.
2003
2004 * Build systems:
2005
2006 - Windows: Fix building of resource files when config.h isn't
2007 used. CMake + Visual Studio can now build liblzma.dll.
2008
2009 - Various fixes to the CMake support. Building static or shared
2010 liblzma should work fine in most cases. In contrast, building
2011 the command line tools with CMake is still clearly incomplete
2012 and experimental and should be used for testing only.
2013
2014
2015 5.2.5 (2020-03-17)
2016
2017 * liblzma:
2018
2019 - Fixed several C99/C11 conformance bugs. Now the code is clean
2020 under gcc/clang -fsanitize=undefined. Some of these changes
2021 might have a negative effect on performance with old GCC
2022 versions or compilers other than GCC and Clang. The configure
2023 option --enable-unsafe-type-punning can be used to (mostly)
2024 restore the old behavior but it shouldn't normally be used.
2025
2026 - Improved API documentation of lzma_properties_decode().
2027
2028 - Added a very minor encoder speed optimization.
2029
2030 * xz:
2031
2032 - Fixed a crash in "xz -dcfv not_an_xz_file". All four options
2033 were required to trigger it. The crash occurred in the
2034 progress indicator code when xz was in passthru mode where
2035 xz works like "cat".
2036
2037 - Fixed an integer overflow with 32-bit off_t. It could happen
2038 when decompressing a file that has a long run of zero bytes
2039 which xz would try to write as a sparse file. Since the build
2040 system enables large file support by default, off_t is
2041 normally 64-bit even on 32-bit systems.
2042
2043 - Fixes for --flush-timeout:
2044 * Fix semi-busy-waiting.
2045 * Avoid unneeded flushes when no new input has arrived
2046 since the previous flush was completed.
2047
2048 - Added a special case for 32-bit xz: If --memlimit-compress is
2049 used to specify a limit that exceeds 4020 MiB, the limit will
2050 be set to 4020 MiB. The values "0" and "max" aren't affected
2051 by this and neither is decompression. This hack can be
2052 helpful when a 32-bit xz has access to 4 GiB address space
2053 but the specified memlimit exceeds 4 GiB. This can happen
2054 e.g. with some scripts.
2055
2056 - Capsicum sandbox is now enabled by default where available
2057 (FreeBSD >= 10). The sandbox debug messages (xz -vv) were
2058 removed since they seemed to be more annoying than useful.
2059
2060 - DOS build now requires DJGPP 2.05 instead of 2.04beta.
2061 A workaround for a locale problem with DJGPP 2.05 was added.
2062
2063 * xzgrep and other scripts:
2064
2065 - Added a configure option --enable-path-for-scripts=PREFIX.
2066 It is disabled by default except on Solaris where the default
2067 is /usr/xpg4/bin. See INSTALL for details.
2068
2069 - Added a workaround for a POSIX shell detection problem on
2070 Solaris.
2071
2072 * Build systems:
2073
2074 - Added preliminary build instructions for z/OS. See INSTALL
2075 section 1.2.9.
2076
2077 - Experimental CMake support was added. It should work to build
2078 static liblzma on a few operating systems. It may or may not
2079 work to build shared liblzma. On some platforms it can build
2080 xz and xzdec too but those are only for testing. See the
2081 comment in the beginning of CMakeLists.txt for details.
2082
2083 - Visual Studio project files were updated.
2084 WindowsTargetPlatformVersion was removed from VS2017 files
2085 and set to "10.0" in the added VS2019 files. In the future
2086 the VS project files will be removed when CMake support is
2087 good enough.
2088
2089 - New #defines in config.h: HAVE___BUILTIN_ASSUME_ALIGNED,
2090 HAVE___BUILTIN_BSWAPXX, and TUKLIB_USE_UNSAFE_TYPE_PUNNING.
2091
2092 - autogen.sh has a new optional dependency on po4a and a new
2093 option --no-po4a to skip that step. This matters only if one
2094 wants to remake the build files. po4a is used to update the
2095 translated man pages but as long as the man pages haven't
2096 been modified, there's nothing to update and one can use
2097 --no-po4a to avoid the dependency on po4a.
2098
2099 * Translations:
2100
2101 - XZ Utils translations are now handled by the Translation
2102 Project: https://translationproject.org/domain/xz.html
2103
2104 - All man pages are now included in German too.
2105
2106 - New xz translations: Brazilian Portuguese, Finnish,
2107 Hungarian, Chinese (simplified), Chinese (traditional),
2108 and Danish (partial translation)
2109
2110 - Updated xz translations: French, German, Italian, and Polish
2111
2112 - Unfortunately a few new xz translations weren't included due
2113 to technical problems like too long lines in --help output or
2114 misaligned column headings in tables. In the future, many of
2115 these strings will be split and e.g. the table column
2116 alignment will be handled in software. This should make the
2117 strings easier to translate.
2118
2119
2120 5.2.4 (2018-04-29)
2121
2122 * liblzma:
2123
2124 - Allow 0 as memory usage limit instead of returning
2125 LZMA_PROG_ERROR. Now 0 is treated as if 1 byte was specified,
2126 which effectively is the same as 0.
2127
2128 - Use "noexcept" keyword instead of "throw()" in the public
2129 headers when a C++11 (or newer standard) compiler is used.
2130
2131 - Added a portability fix for recent Intel C Compilers.
2132
2133 - Microsoft Visual Studio build files have been moved under
2134 windows/vs2013 and windows/vs2017.
2135
2136 * xz:
2137
2138 - Fix "xz --list --robot missing_or_bad_file.xz" which would
2139 try to print an uninitialized string and thus produce garbage
2140 output. Since the exit status is non-zero, most uses of such
2141 a command won't try to interpret the garbage output.
2142
2143 - "xz --list foo.xz" could print "Internal error (bug)" in a
2144 corner case where a specific memory usage limit had been set.
2145
2146
2147 5.2.3 (2016-12-30)
2148
2149 * xz:
2150
2151 - Always close a file before trying to delete it to avoid
2152 problems on some operating system and file system combinations.
2153
2154 - Fixed copying of file timestamps on Windows.
2155
2156 - Added experimental (disabled by default) sandbox support using
2157 Capsicum (FreeBSD >= 10). See --enable-sandbox in INSTALL.
2158
2159 * C99/C11 conformance fixes to liblzma. The issues affected at least
2160 some builds using link-time optimizations.
2161
2162 * Fixed bugs in the rarely-used function lzma_index_dup().
2163
2164 * Use of external SHA-256 code is now disabled by default.
2165 It can still be enabled by passing --enable-external-sha256
2166 to configure. The reasons to disable it by default (see INSTALL
2167 for more details):
2168
2169 - Some OS-specific SHA-256 implementations conflict with
2170 OpenSSL and cause problems in programs that link against both
2171 liblzma and libcrypto. At least FreeBSD 10 and MINIX 3.3.0
2172 are affected.
2173
2174 - The internal SHA-256 is faster than the SHA-256 code in
2175 some operating systems.
2176
2177 * Changed CPU core count detection to use sched_getaffinity() on
2178 GNU/Linux and GNU/kFreeBSD.
2179
2180 * Fixes to the build-system and xz to make xz buildable even when
2181 encoders, decoders, or threading have been disabled from libilzma
2182 using configure options. These fixes added two new #defines to
2183 config.h: HAVE_ENCODERS and HAVE_DECODERS.
2184
2185
2186 5.2.2 (2015-09-29)
2187
2188 * Fixed bugs in QNX-specific code.
2189
2190 * Omitted the use of pipe2() even if it is available to avoid
2191 portability issues with some old Linux and glibc combinations.
2192
2193 * Updated German translation.
2194
2195 * Added project files to build static and shared liblzma (not the
2196 whole XZ Utils) with Visual Studio 2013 update 2 or later.
2197
2198 * Documented that threaded decompression hasn't been implemented
2199 yet. A 5.2.0 NEWS entry describing multi-threading support had
2200 incorrectly said "decompression" when it should have said
2201 "compression".
2202
2203
2204 5.2.1 (2015-02-26)
2205
2206 * Fixed a compression-ratio regression in fast mode of LZMA1 and
2207 LZMA2. The bug is present in 5.1.4beta and 5.2.0 releases.
2208
2209 * Fixed a portability problem in xz that affected at least OpenBSD.
2210
2211 * Fixed xzdiff to be compatible with FreeBSD's mktemp which differs
2212 from most other mktemp implementations.
2213
2214 * Changed CPU core count detection to use cpuset_getaffinity() on
2215 FreeBSD.
2216
2217
2218 5.2.0 (2014-12-21)
2219
2220 Since 5.1.4beta:
2221
2222 * All fixes from 5.0.8
2223
2224 * liblzma: Fixed lzma_stream_encoder_mt_memusage() when a preset
2225 was used.
2226
2227 * xzdiff: If mktemp isn't installed, mkdir will be used as
2228 a fallback to create a temporary directory. Installing mktemp
2229 is still recommended.
2230
2231 * Updated French, German, Italian, Polish, and Vietnamese
2232 translations.
2233
2234 Summary of fixes and new features added in the 5.1.x development
2235 releases:
2236
2237 * liblzma:
2238
2239 - Added support for multi-threaded compression. See the
2240 lzma_mt structure, lzma_stream_encoder_mt(), and
2241 lzma_stream_encoder_mt_memusage() in <lzma/container.h>,
2242 lzma_get_progress() in <lzma/base.h>, and lzma_cputhreads()
2243 in <lzma/hardware.h> for details.
2244
2245 - Made the uses of lzma_allocator const correct.
2246
2247 - Added lzma_block_uncomp_encode() to create uncompressed
2248 .xz Blocks using LZMA2 uncompressed chunks.
2249
2250 - Added support for LZMA_IGNORE_CHECK.
2251
2252 - A few speed optimizations were made.
2253
2254 - Added support for symbol versioning. It is enabled by default
2255 on GNU/Linux, other GNU-based systems, and FreeBSD.
2256
2257 - liblzma (not the whole XZ Utils) should now be buildable
2258 with MSVC 2013 update 2 or later using windows/config.h.
2259
2260 * xz:
2261
2262 - Fixed a race condition in the signal handling. It was
2263 possible that e.g. the first SIGINT didn't make xz exit
2264 if reading or writing blocked and one had bad luck. The fix
2265 is non-trivial, so as of writing it is unknown if it will be
2266 backported to the v5.0 branch.
2267
2268 - Multi-threaded compression can be enabled with the
2269 --threads (-T) option.
2270 [Fixed: This originally said "decompression".]
2271
2272 - New command line options in xz: --single-stream,
2273 --block-size=SIZE, --block-list=SIZES,
2274 --flush-timeout=TIMEOUT, and --ignore-check.
2275
2276 - xz -lvv now shows the minimum xz version that is required to
2277 decompress the file. Currently it is 5.0.0 for all supported
2278 .xz files except files with empty LZMA2 streams require 5.0.2.
2279
2280 * xzdiff and xzgrep now support .lzo files if lzop is installed.
2281 The .tzo suffix is also recognized as a shorthand for .tar.lzo.
2282
2283
2284 5.1.4beta (2014-09-14)
2285
2286 * All fixes from 5.0.6
2287
2288 * liblzma: Fixed the use of presets in threaded encoder
2289 initialization.
2290
2291 * xz --block-list and --block-size can now be used together
2292 in single-threaded mode. Previously the combination only
2293 worked in multi-threaded mode.
2294
2295 * Added support for LZMA_IGNORE_CHECK to liblzma and made it
2296 available in xz as --ignore-check.
2297
2298 * liblzma speed optimizations:
2299
2300 - Initialization of a new LZMA1 or LZMA2 encoder has been
2301 optimized. (The speed of reinitializing an already-allocated
2302 encoder isn't affected.) This helps when compressing many
2303 small buffers with lzma_stream_buffer_encode() and other
2304 similar situations where an already-allocated encoder state
2305 isn't reused. This speed-up is visible in xz too if one
2306 compresses many small files one at a time instead running xz
2307 once and giving all files as command-line arguments.
2308
2309 - Buffer comparisons are now much faster when unaligned access
2310 is allowed (configured with --enable-unaligned-access). This
2311 speeds up encoding significantly. There is arch-specific code
2312 for 32-bit and 64-bit x86 (32-bit needs SSE2 for the best
2313 results and there's no run-time CPU detection for now).
2314 For other archs there is only generic code which probably
2315 isn't as optimal as arch-specific solutions could be.
2316
2317 - A few speed optimizations were made to the SHA-256 code.
2318 (Note that the builtin SHA-256 code isn't used on all
2319 operating systems.)
2320
2321 * liblzma can now be built with MSVC 2013 update 2 or later
2322 using windows/config.h.
2323
2324 * Vietnamese translation was added.
2325
2326
2327 5.1.3alpha (2013-10-26)
2328
2329 * All fixes from 5.0.5
2330
2331 * liblzma:
2332
2333 - Fixed a deadlock in the threaded encoder.
2334
2335 - Made the uses of lzma_allocator const correct.
2336
2337 - Added lzma_block_uncomp_encode() to create uncompressed
2338 .xz Blocks using LZMA2 uncompressed chunks.
2339
2340 - Added support for native threads on Windows and the ability
2341 to detect the number of CPU cores.
2342
2343 * xz:
2344
2345 - Fixed a race condition in the signal handling. It was
2346 possible that e.g. the first SIGINT didn't make xz exit
2347 if reading or writing blocked and one had bad luck. The fix
2348 is non-trivial, so as of writing it is unknown if it will be
2349 backported to the v5.0 branch.
2350
2351 - Made the progress indicator work correctly in threaded mode.
2352
2353 - Threaded encoder now works together with --block-list=SIZES.
2354
2355 - Added preliminary support for --flush-timeout=TIMEOUT.
2356 It can be useful for (somewhat) real-time streaming. For
2357 now the decompression side has to be done with something
2358 else than the xz tool due to how xz does buffering, but this
2359 should be fixed.
2360
2361
2362 5.1.2alpha (2012-07-04)
2363
2364 * All fixes from 5.0.3 and 5.0.4
2365
2366 * liblzma:
2367
2368 - Fixed a deadlock and an invalid free() in the threaded encoder.
2369
2370 - Added support for symbol versioning. It is enabled by default
2371 on GNU/Linux, other GNU-based systems, and FreeBSD.
2372
2373 - Use SHA-256 implementation from the operating system if one is
2374 available in libc, libmd, or libutil. liblzma won't use e.g.
2375 OpenSSL or libgcrypt to avoid introducing new dependencies.
2376
2377 - Fixed liblzma.pc for static linking.
2378
2379 - Fixed a few portability bugs.
2380
2381 * xz --decompress --single-stream now fixes the input position after
2382 successful decompression. Now the following works:
2383
2384 echo foo | xz > foo.xz
2385 echo bar | xz >> foo.xz
2386 ( xz -dc --single-stream ; xz -dc --single-stream ) < foo.xz
2387
2388 Note that it doesn't work if the input is not seekable
2389 or if there is Stream Padding between the concatenated
2390 .xz Streams.
2391
2392 * xz -lvv now shows the minimum xz version that is required to
2393 decompress the file. Currently it is 5.0.0 for all supported .xz
2394 files except files with empty LZMA2 streams require 5.0.2.
2395
2396 * Added an *incomplete* implementation of --block-list=SIZES to xz.
2397 It only works correctly in single-threaded mode and when
2398 --block-size isn't used at the same time. --block-list allows
2399 specifying the sizes of Blocks which can be useful e.g. when
2400 creating files for random-access reading.
2401
2402
2403 5.1.1alpha (2011-04-12)
2404
2405 * All fixes from 5.0.2
2406
2407 * liblzma fixes that will also be included in 5.0.3:
2408
2409 - A memory leak was fixed.
2410
2411 - lzma_stream_buffer_encode() no longer creates an empty .xz
2412 Block if encoding an empty buffer. Such an empty Block with
2413 LZMA2 data would trigger a bug in 5.0.1 and older (see the
2414 first bullet point in 5.0.2 notes). When releasing 5.0.2,
2415 I thought that no encoder creates this kind of files but
2416 I was wrong.
2417
2418 - Validate function arguments better in a few functions. Most
2419 importantly, specifying an unsupported integrity check to
2420 lzma_stream_buffer_encode() no longer creates a corrupt .xz
2421 file. Probably no application tries to do that, so this
2422 shouldn't be a big problem in practice.
2423
2424 - Document that lzma_block_buffer_encode(),
2425 lzma_easy_buffer_encode(), lzma_stream_encoder(), and
2426 lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK.
2427
2428 - The return values of the _memusage() functions are now
2429 documented better.
2430
2431 * Support for multithreaded compression was added using the simplest
2432 method, which splits the input data into blocks and compresses
2433 them independently. Other methods will be added in the future.
2434 The current method has room for improvement, e.g. it is possible
2435 to reduce the memory usage.
2436
2437 * Added the options --single-stream and --block-size=SIZE to xz.
2438
2439 * xzdiff and xzgrep now support .lzo files if lzop is installed.
2440 The .tzo suffix is also recognized as a shorthand for .tar.lzo.
2441
2442 * Support for short 8.3 filenames under DOS was added to xz. It is
2443 experimental and may change before it gets into a stable release.
2444
2445
2446 5.0.8 (2014-12-21)
2447
2448 * Fixed an old bug in xzgrep that affected OpenBSD and probably
2449 a few other operating systems too.
2450
2451 * Updated French and German translations.
2452
2453 * Added support for detecting the amount of RAM on AmigaOS/AROS.
2454
2455 * Minor build system updates.
2456
2457
2458 5.0.7 (2014-09-20)
2459
2460 * Fix regressions introduced in 5.0.6:
2461
2462 - Fix building with non-GNU make.
2463
2464 - Fix invalid Libs.private value in liblzma.pc which broke
2465 static linking against liblzma if the linker flags were
2466 taken from pkg-config.
2467
2468
2469 5.0.6 (2014-09-14)
2470
2471 * xzgrep now exits with status 0 if at least one file matched.
2472
2473 * A few minor portability and build system fixes
2474
2475
2476 5.0.5 (2013-06-30)
2477
2478 * lzmadec and liblzma's lzma_alone_decoder(): Support decompressing
2479 .lzma files that have less common settings in the headers
2480 (dictionary size other than 2^n or 2^n + 2^(n-1), or uncompressed
2481 size greater than 256 GiB). The limitations existed to avoid false
2482 positives when detecting .lzma files. The lc + lp <= 4 limitation
2483 still remains since liblzma's LZMA decoder has that limitation.
2484
2485 NOTE: xz's .lzma support or liblzma's lzma_auto_decoder() are NOT
2486 affected by this change. They still consider uncommon .lzma headers
2487 as not being in the .lzma format. Changing this would give way too
2488 many false positives.
2489
2490 * xz:
2491
2492 - Interaction of preset and custom filter chain options was
2493 made less illogical. This affects only certain less typical
2494 uses cases so few people are expected to notice this change.
2495
2496 Now when a custom filter chain option (e.g. --lzma2) is
2497 specified, all preset options (-0 ... -9, -e) earlier are on
2498 the command line are completely forgotten. Similarly, when
2499 a preset option is specified, all custom filter chain options
2500 earlier on the command line are completely forgotten.
2501
2502 Example 1: "xz -9 --lzma2=preset=5 -e" is equivalent to "xz -e"
2503 which is equivalent to "xz -6e". Earlier -e didn't put xz back
2504 into preset mode and thus the example command was equivalent
2505 to "xz --lzma2=preset=5".
2506
2507 Example 2: "xz -9e --lzma2=preset=5 -7" is equivalent to
2508 "xz -7". Earlier a custom filter chain option didn't make
2509 xz forget the -e option so the example was equivalent to
2510 "xz -7e".
2511
2512 - Fixes and improvements to error handling.
2513
2514 - Various fixes to the man page.
2515
2516 * xzless: Fixed to work with "less" versions 448 and later.
2517
2518 * xzgrep: Made -h an alias for --no-filename.
2519
2520 * Include the previously missing debug/translation.bash which can
2521 be useful for translators.
2522
2523 * Include a build script for Mac OS X. This has been in the Git
2524 repository since 2010 but due to a mistake in Makefile.am the
2525 script hasn't been included in a release tarball before.
2526
2527
2528 5.0.4 (2012-06-22)
2529
2530 * liblzma:
2531
2532 - Fix lzma_index_init(). It could crash if memory allocation
2533 failed.
2534
2535 - Fix the possibility of an incorrect LZMA_BUF_ERROR when a BCJ
2536 filter is used and the application only provides exactly as
2537 much output space as is the uncompressed size of the file.
2538
2539 - Fix a bug in doc/examples_old/xz_pipe_decompress.c. It didn't
2540 check if the last call to lzma_code() really returned
2541 LZMA_STREAM_END, which made the program think that truncated
2542 files are valid.
2543
2544 - New example programs in doc/examples (old programs are now in
2545 doc/examples_old). These have more comments and more detailed
2546 error handling.
2547
2548 * Fix "xz -lvv foo.xz". It could crash on some corrupted files.
2549
2550 * Fix output of "xz --robot -lv" and "xz --robot -lvv" which
2551 incorrectly printed the filename also in the "foo (x/x)" format.
2552
2553 * Fix exit status of "xzdiff foo.xz bar.xz".
2554
2555 * Fix exit status of "xzgrep foo binary_file".
2556
2557 * Fix portability to EBCDIC systems.
2558
2559 * Fix a configure issue on AIX with the XL C compiler. See INSTALL
2560 for details.
2561
2562 * Update French, German, Italian, and Polish translations.
2563
2564
2565 5.0.3 (2011-05-21)
2566
2567 * liblzma fixes:
2568
2569 - A memory leak was fixed.
2570
2571 - lzma_stream_buffer_encode() no longer creates an empty .xz
2572 Block if encoding an empty buffer. Such an empty Block with
2573 LZMA2 data would trigger a bug in 5.0.1 and older (see the
2574 first bullet point in 5.0.2 notes). When releasing 5.0.2,
2575 I thought that no encoder creates this kind of files but
2576 I was wrong.
2577
2578 - Validate function arguments better in a few functions. Most
2579 importantly, specifying an unsupported integrity check to
2580 lzma_stream_buffer_encode() no longer creates a corrupt .xz
2581 file. Probably no application tries to do that, so this
2582 shouldn't be a big problem in practice.
2583
2584 - Document that lzma_block_buffer_encode(),
2585 lzma_easy_buffer_encode(), lzma_stream_encoder(), and
2586 lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK.
2587
2588 - The return values of the _memusage() functions are now
2589 documented better.
2590
2591 * Fix command name detection in xzgrep. xzegrep and xzfgrep now
2592 correctly use egrep and fgrep instead of grep.
2593
2594 * French translation was added.
2595
2596
2597 5.0.2 (2011-04-01)
2598
2599 * LZMA2 decompressor now correctly accepts LZMA2 streams with no
2600 uncompressed data. Previously it considered them corrupt. The
2601 bug can affect applications that use raw LZMA2 streams. It is
2602 very unlikely to affect .xz files because no compressor creates
2603 .xz files with empty LZMA2 streams. (Empty .xz files are a
2604 different thing than empty LZMA2 streams.)
2605
2606 * "xz --suffix=.foo filename.foo" now refuses to compress the
2607 file due to it already having the suffix .foo. It was already
2608 documented on the man page, but the code lacked the test.
2609
2610 * "xzgrep -l foo bar.xz" works now.
2611
2612 * Polish translation was added.
2613
2614
2615 5.0.1 (2011-01-29)
2616
2617 * xz --force now (de)compresses files that have setuid, setgid,
2618 or sticky bit set and files that have multiple hard links.
2619 The man page had it documented this way already, but the code
2620 had a bug.
2621
2622 * gzip and bzip2 support in xzdiff was fixed.
2623
2624 * Portability fixes
2625
2626 * Minor fix to Czech translation
2627
2628
2629 5.0.0 (2010-10-23)
2630
2631 Only the most important changes compared to 4.999.9beta are listed
2632 here. One change is especially important:
2633
2634 * The memory usage limit is now disabled by default. Some scripts
2635 written before this change may have used --memory=max on xz command
2636 line or in XZ_OPT. THESE USES OF --memory=max SHOULD BE REMOVED
2637 NOW, because they interfere with user's ability to set the memory
2638 usage limit himself. If user-specified limit causes problems to
2639 your script, blame the user.
2640
2641 Other significant changes:
2642
2643 * Added support for XZ_DEFAULTS environment variable. This variable
2644 allows users to set default options for xz, e.g. default memory
2645 usage limit or default compression level. Scripts that use xz
2646 must never set or unset XZ_DEFAULTS. Scripts should use XZ_OPT
2647 instead if they need a way to pass options to xz via an
2648 environment variable.
2649
2650 * The compression settings associated with the preset levels
2651 -0 ... -9 have been changed. --extreme was changed a little too.
2652 It is now less likely to make compression worse, but with some
2653 files the new --extreme may compress slightly worse than the old
2654 --extreme.
2655
2656 * If a preset level (-0 ... -9) is specified after a custom filter
2657 chain options have been used (e.g. --lzma2), the custom filter
2658 chain will be forgotten. Earlier the preset options were
2659 completely ignored after custom filter chain options had been
2660 seen.
2661
2662 * xz will create sparse files when decompressing if the uncompressed
2663 data contains long sequences of binary zeros. This is done even
2664 when writing to standard output that is connected to a regular
2665 file and certain additional conditions are met to make it safe.
2666
2667 * Support for "xz --list" was added. Combine with --verbose or
2668 --verbose --verbose (-vv) for detailed output.
2669
2670 * I had hoped that liblzma API would have been stable after
2671 4.999.9beta, but there have been a couple of changes in the
2672 advanced features, which don't affect most applications:
2673
2674 - Index handling code was revised. If you were using the old
2675 API, you will get a compiler error (so it's easy to notice).
2676
2677 - A subtle but important change was made to the Block handling
2678 API. lzma_block.version has to be initialized even for
2679 lzma_block_header_decode(). Code that doesn't do it will work
2680 for now, but might break in the future, which makes this API
2681 change easy to miss.
2682
2683 * The major soname has been bumped to 5.0.0. liblzma API and ABI
2684 are now stable, so the need to recompile programs linking against
2685 liblzma shouldn't arise soon.
2686