Mercurial > repos > rliterman > csp2
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 |