1HISTORY of the LZMA SDK 2----------------------- 3 424.09 2024-11-29 5------------------------- 6- The default dictionary size values for LZMA/LZMA2 compression methods were increased: 7 dictionary size compression level 8 v24.08 v24.09 v24.09 9 32-bit 64-bit 10 8 MB 16 MB 16 MB -mx4 11 16 MB 32 MB 32 MB -mx5 : Normal 12 32 MB 64 MB 64 MB -mx6 13 32 MB 64 MB 128 MB -mx7 : Maximum 14 64 MB 64 MB 256 MB -mx8 15 64 MB 64 MB 256 MB -mx9 : Ultra 16 The default dictionary size values for 32-bit versions of LZMA/LZMA2 don't exceed 64 MB. 17- If an archive update operation uses a temporary archive folder and 18 the archive is moved to the destination folder, 7-Zip shows the progress of moving 19 the archive file, as this operation can take a long time if the archive is large. 20- Some bugs were fixed. 21 22 2324.07 2024-06-19 24------------------------- 25- Changes in files: 26 Asm/x86/Sha256Opt.asm 27 Now it uses "READONLY" flag for constant array segment. 28 It fixes an issue where ".rodata" section in 7-Zip for x86/x64 Linux had a "WRITE" attribute. 29 30 3124.05 2024-05-14 32------------------------- 33- New switch -myv={MMNN} to set decoder compatibility version for 7z archive creating. 34 {MMNN} is 4-digit number that represents the version of 7-Zip without a dot. 35 If -myv={MMNN} switch is specified, 7-Zip will only use compression methods that can 36 be decoded by the specified version {MMNN} of 7-Zip and newer versions. 37 If -myv={MMNN} switch is not specified, -myv=2300 is used, and 7-Zip will only 38 use compression methods that can be decoded by 7-Zip 23.00 and newer versions. 39- New switch -myfa={FilterID} to allow 7-Zip to use the specified filter method for 7z archive creating. 40- New switch -myfd={FilterID} to disallow 7-Zip to use the specified filter method for 7z archive creating. 41 42 4324.03 2024-03-23 44------------------------- 45- 7-Zip now can use new RISCV filter for compression to 7z and xz archives. 46 RISCV filter can increase compression ratio for data containing executable 47 files compiled for RISC-V architecture. 48- The speed for LZMA and LZMA2 decompression in ARM64 version for Windows 49 was increased by 20%-60%. 50 It uses arm64 assembler code, and clang-cl is required for arm64 assembler code compiling. 51- -slmu switch : to show timestamps as UTC instead of LOCAL TIME. 52- -slsl switch : in console 7-Zip for Windows : to show file paths with 53 linux path separator slash '/' instead of backslash separator '\'. 54- 7-Zip supports .sha256 files that use backslash path separator '\'. 55- Some bugs were fixed. 56 57 5824.01 2024-01-31 59------------------------- 60- 7-Zip uses file C/Precomp.h that is included to all c and c++ files. 61 CPP/Common/Common.h also includes C/Precomp.h. 62 C/Precomp.h defines the following macros (if _WIN32 is defined): 63 Z7_LARGE_PAGES 1 64 Z7_LONG_PATH 1 65 Z7_WIN32_WINNT_MIN 0x0500 (or higher) 66 _WIN32_WINNT 0x0500 (or higher) 67 WINVER _WIN32_WINNT 68 UNICODE 1 69 _UNICODE 1 70 if _WIN32_WINNT is defined already, C/Precomp.h doesn't redefine it. 71 72- Speed optimizations for hash caclulation: CRC-32, CRC-64. 73- The bug was fixed: 7-Zip for Linux could fail for multivolume creation in some cases. 74- 7zr.exe for arm64 is included to LZMA SDK package. 75- Some bugs were fixed. 76 77 7823.01 2023-06-20 79------------------------- 80- 7-Zip now can use new ARM64 filter for compression to 7z and xz archives. 81 ARM64 filter can increase compression ratio for data containing executable 82 files compiled for ARM64 (AArch64) architecture. 83 Also 7-Zip now parses executable files (that have exe and dll filename extensions) 84 before compressing, and it selects appropriate filter for each parsed file: 85 - BCJ or BCJ2 filter for x86 executable files, 86 - ARM64 filter for ARM64 executable files. 87 Previous versions by default used x86 filter BCJ or BCJ2 for all exe/dll files. 88- Default section size for BCJ2 filter was changed from 64 MiB to 240 MiB. 89 It can increase compression ratio for executable files larger than 64 MiB. 90- Some optimizations in filters code: BCJ, BCJ2, Swap* and opthers. 91- If 7-Zip uses BCJ2 filter for big datasets compressing, it can use additional temp 92 files in system's TEMP folder. 7-Zip uses temp file for additional compressed 93 data stream, if size of such compressed stream is larger than predefined limit: 94 16 MiB in 32-bit version, 4 GiB in 64-bit version. 95- When new 7-Zip creates multivolume archive, 7-Zip keeps in open state 96 only volumes that still can be changed. Previous versions kept all volumes 97 in open state until the end of the archive creation. 98- 7-Zip for Linux and macOS now can reduce the number of simultaneously open files, 99 when 7-Zip opens, extracts or creates multivolume archive. It allows to avoid 100 the failures for cases with big number of volumes, bacause there is a limitation 101 for number of open files allowed for a single program in Linux and macOS. 102- Some bugs were fixed. 103- Source code changes: 104- All external macros for compiling C/C++ code of 7-Zip now have Z7_ prefix. 105- 7-Zip COM interfaces now use new macros that allow to declare and implement COM interface. 106- The code has been modified to compile with the maximum diagnostic warning level: 107 -Wall in MSVC and -Weverything in CLANG. 108 And some warning types are disabled in 2 files: 109 - C/Compiler.h for C/C++ code warnings. 110 - CPP/Common/Common.h for C++ code warnings. 111- Linux/macOS versions of 7-Zip: IUnknown interface in new code doesn't use 112 virtual destructor that was used in previous 7-Zip and p7zip: 113 // virtual ~IUnknown() {} 114 So 7-Zip's dynamically linked shared libraries (codecs) are not compatible 115 between new 7-Zip for Linux/macOS and old 7-Zip (and p7zip). 116 117 11821.07 2021-12-26 119------------------------- 120- New switches: -spm and -im!{file_path} to exclude directories from processing 121 for specified paths that don't contain path separator character at the end of path. 122- The sorting order of files in archives was slightly changed to be more consistent 123 for cases where the name of some directory is the same as the prefix part of the name 124 of another directory or file. 125 126 12721.06 2021-11-24 128------------------------- 129- Bug in LZMA encoder in file LzmaEnc.c was fixed: 130 LzmaEnc_MemEncode(), LzmaEncode() and LzmaCompress() could work incorrectly, 131 if size value for output buffer is smaller than size required for all compressed data. 132 LzmaEnc_Encode() could work incorrectly, 133 if callback ISeqOutStream::Write() doesn't write all compressed data. 134 NCompress::NLzma::CEncoder::Code() could work incorrectly, 135 if callback ISequentialOutStream::Write() returns error code. 136- Bug in versions 21.00-21.05 was fixed: 137 7-Zip didn't set attributes of directories during archive extracting. 138 139 14021.04 beta 2021-11-02 141------------------------- 142- 7-Zip now reduces the number of working CPU threads for compression, 143 if RAM size is not enough for compression with big LZMA2 dictionary. 144- 7-Zip now can create and check "file.sha256" text files that contain the list 145 of file names and SHA-256 checksums in format compatible with sha256sum program. 146 147 14821.03 beta 2021-07-20 149------------------------- 150- The maximum dictionary size for LZMA/LZMA2 compressing was increased to 4 GB (3840 MiB). 151- Minor speed optimizations in LZMA/LZMA2 compressing. 152 153 15421.02 alpha 2021-05-06 155------------------------- 156- The command line version of 7-Zip for macOS was released. 157- The speed for LZMA and LZMA2 decompression in arm64 versions for macOS and Linux 158 was increased by 20%-60%. 159 160 16121.01 alpha 2021-03-09 162------------------------- 163- The command line version of 7-Zip for Linux was released. 164- The improvements for speed of ARM64 version using hardware CPU instructions 165 for AES, CRC-32, SHA-1 and SHA-256. 166- Some bugs were fixed. 167 168 16920.02 alpha 2020-08-08 170------------------------- 171- The default number of LZMA2 chunks per solid block in 7z archive was increased to 64. 172 It allows to increase the compression speed for big 7z archives, if there is a big number 173 of CPU cores and threads. 174- The speed of PPMd compressing/decompressing was increased for 7z archives. 175- The new -ssp switch. If the switch -ssp is specified, 7-Zip doesn't allow the system 176 to modify "Last Access Time" property of source files for archiving and hashing operations. 177- Some bugs were fixed. 178 179 18020.00 alpha 2020-02-06 181------------------------- 182- 7-Zip now supports new optional match finders for LZMA/LZMA2 compression: bt5 and hc5, 183 that can work faster than bt4 and hc4 match finders for the data with big redundancy. 184- The compression ratio was improved for Fast and Fastest compression levels with the 185 following default settings: 186 - Fastest level (-mx1) : hc5 match finder with 256 KB dictionary. 187 - Fast level (-mx3) : hc5 match finder with 4 MB dictionary. 188- Minor speed optimizations in multithreaded LZMA/LZMA2 compression for Normal/Maximum/Ultra 189 compression levels. 190 191 19219.00 2019-02-21 193------------------------- 194- Encryption strength for 7z archives was increased: 195 the size of random initialization vector was increased from 64-bit to 128-bit, 196 and the pseudo-random number generator was improved. 197- The bug in 7zIn.c code was fixed. 198 199 20018.06 2018-12-30 201------------------------- 202- The speed for LZMA/LZMA2 compressing was increased by 3-10%, 203 and there are minor changes in compression ratio. 204- Some bugs were fixed. 205- The bug in 7-Zip 18.02-18.05 was fixed: 206 There was memory leak in multithreading xz decoder - XzDecMt_Decode(), 207 if xz stream contains only one block. 208- The changes for MSVS compiler makefiles: 209 - the makefiles now use "PLATFORM" macroname with values (x64, x86, arm64) 210 instead of "CPU" macroname with values (AMD64, ARM64). 211 - the makefiles by default now use static version of the run-time library. 212 213 21418.05 2018-04-30 215------------------------- 216- The speed for LZMA/LZMA2 compressing was increased 217 by 8% for fastest/fast compression levels and 218 by 3% for normal/maximum compression levels. 219- Previous versions of 7-Zip could work incorrectly in "Large memory pages" mode in 220 Windows 10 because of some BUG with "Large Pages" in Windows 10. 221 Now 7-Zip doesn't use "Large Pages" on Windows 10 up to revision 1709 (16299). 222- The BUG was fixed in Lzma2Enc.c 223 Lzma2Enc_Encode2() function worked incorretly, 224 if (inStream == NULL) and the number of block threads is more than 1. 225 226 22718.03 beta 2018-03-04 228------------------------- 229- Asm\x86\LzmaDecOpt.asm: new optimized LZMA decoder written in asm 230 for x64 with about 30% higher speed than main version of LZMA decoder written in C. 231- The speed for single-thread LZMA/LZMA2 decoder written in C was increased by 3%. 232- 7-Zip now can use multi-threading for 7z/LZMA2 decoding, 233 if there are multiple independent data chunks in LZMA2 stream. 234- 7-Zip now can use multi-threading for xz decoding, 235 if there are multiple blocks in xz stream. 236 237 23818.01 2019-01-28 239------------------------- 240- The BUG in 17.01 - 18.00 beta was fixed: 241 XzDec.c : random block unpacking and XzUnpacker_IsBlockFinished() 242 didn't work correctly for xz archives without checksum (CRC). 243 244 24518.00 beta 2019-01-10 246------------------------- 247- The BUG in xz encoder was fixed: 248 There was memory leak of 16 KB for each file compressed with 249 xz compression method, if additional filter was used. 250 251 25217.01 beta 2017-08-28 253------------------------- 254- Minor speed optimization for LZMA2 (xz and 7z) multi-threading compression. 255 7-Zip now uses additional memory buffers for multi-block LZMA2 compression. 256 CPU utilization was slightly improved. 257- 7-zip now creates multi-block xz archives by default. Block size can be 258 specified with -ms[Size]{m|g} switch. 259- xz decoder now can unpack random block from multi-block xz archives. 260- 7-Zip command line: @listfile now doesn't work after -- switch. 261 Use -i@listfile before -- switch instead. 262- The BUGs were fixed: 263 7-Zip 17.00 beta crashed for commands that write anti-item to 7z archive. 264 265 26617.00 beta 2017-04-29 267------------------------- 268- NewHandler.h / NewHandler.cpp: 269 now it redefines operator new() only for old MSVC compilers (_MSC_VER < 1900). 270- C/7zTypes.h : the names of variables in interface structures were changed (vt). 271- Some bugs were fixed. 7-Zip could crash in some cases. 272- Some internal changes in code. 273 274 27516.04 2016-10-04 276------------------------- 277- The bug was fixed in DllSecur.c. 278 279 28016.03 2016-09-28 281------------------------- 282- SFX modules now use some protection against DLL preloading attack. 283- Some bugs in 7z code were fixed. 284 285 28616.02 2016-05-21 287------------------------- 288- The BUG in 16.00 - 16.01 was fixed: 289 Split Handler (SplitHandler.cpp) returned incorrect 290 total size value (kpidSize) for split archives. 291 292 29316.01 2016-05-19 294------------------------- 295- Some internal changes to reduce the number of compiler warnings. 296 297 29816.00 2016-05-10 299------------------------- 300- Some bugs were fixed. 301 302 30315.12 2015-11-19 304------------------------- 305- The BUG in C version of 7z decoder was fixed: 306 7zDec.c : SzDecodeLzma2() 307 7z decoder could mistakenly report about decoding error for some 7z archives 308 that use LZMA2 compression method. 309 The probability to get that mistaken decoding error report was about 310 one error per 16384 solid blocks for solid blocks larger than 16 KB (compressed size). 311- The BUG (in 9.26-15.11) in C version of 7z decoder was fixed: 312 7zArcIn.c : SzReadHeader2() 313 7z decoder worked incorrectly for 7z archives that contain 314 empty solid blocks, that can be placed to 7z archive, if some file is 315 unavailable for reading during archive creation. 316 317 31815.09 beta 2015-10-16 319------------------------- 320- The BUG in LZMA / LZMA2 encoding code was fixed. 321 The BUG in LzFind.c::MatchFinder_ReadBlock() function. 322 If input data size is larger than (4 GiB - dictionary_size), 323 the following code worked incorrectly: 324 - LZMA : LzmaEnc_MemEncode(), LzmaEncode() : LZMA encoding functions 325 for compressing from memory to memory. 326 That BUG is not related to LZMA encoder version that works via streams. 327 - LZMA2 : multi-threaded version of LZMA2 encoder worked incorrectly, if 328 default value of chunk size (CLzma2EncProps::blockSize) is changed 329 to value larger than (4 GiB - dictionary_size). 330 331 3329.38 beta 2015-01-03 333------------------------- 334- The BUG in 9.31-9.37 was fixed: 335 IArchiveGetRawProps interface was disabled for 7z archives. 336- The BUG in 9.26-9.36 was fixed: 337 Some code in CPP\7zip\Archive\7z\ worked correctly only under Windows. 338 339 3409.36 beta 2014-12-26 341------------------------- 342- The BUG in command line version was fixed: 343 7-Zip created temporary archive in current folder during update archive 344 operation, if -w{Path} switch was not specified. 345 The fixed 7-Zip creates temporary archive in folder that contains updated archive. 346- The BUG in 9.33-9.35 was fixed: 347 7-Zip silently ignored file reading errors during 7z or gz archive creation, 348 and the created archive contained only part of file that was read before error. 349 The fixed 7-Zip stops archive creation and it reports about error. 350 351 3529.35 beta 2014-12-07 353------------------------- 354- 7zr.exe now support AES encryption. 355- SFX mudules were added to LZMA SDK 356- Some bugs were fixed. 357 358 3599.21 beta 2011-04-11 360------------------------- 361- New class FString for file names at file systems. 362- Speed optimization in CRC code for big-endian CPUs. 363- The BUG in Lzma2Dec.c was fixed: 364 Lzma2Decode function didn't work. 365 366 3679.18 beta 2010-11-02 368------------------------- 369- New small SFX module for installers (SfxSetup). 370 371 3729.12 beta 2010-03-24 373------------------------- 374- The BUG in LZMA SDK 9.* was fixed: LZMA2 codec didn't work, 375 if more than 10 threads were used (or more than 20 threads in some modes). 376 377 3789.11 beta 2010-03-15 379------------------------- 380- PPMd compression method support 381 382 3839.09 2009-12-12 384------------------------- 385- The bug was fixed: 386 Utf16_To_Utf8 funstions in UTFConvert.cpp and 7zMain.c 387 incorrectly converted surrogate characters (the code >= 0x10000) to UTF-8. 388- Some bugs were fixed 389 390 3919.06 2009-08-17 392------------------------- 393- Some changes in ANSI-C 7z Decoder interfaces. 394 395 3969.04 2009-05-30 397------------------------- 398- LZMA2 compression method support 399- xz format support 400 401 4024.65 2009-02-03 403------------------------- 404- Some minor fixes 405 406 4074.63 2008-12-31 408------------------------- 409- Some minor fixes 410 411 4124.61 beta 2008-11-23 413------------------------- 414- The bug in ANSI-C LZMA Decoder was fixed: 415 If encoded stream was corrupted, decoder could access memory 416 outside of allocated range. 417- Some changes in ANSI-C 7z Decoder interfaces. 418- LZMA SDK is placed in the public domain. 419 420 4214.60 beta 2008-08-19 422------------------------- 423- Some minor fixes. 424 425 4264.59 beta 2008-08-13 427------------------------- 428- The bug was fixed: 429 LZMA Encoder in fast compression mode could access memory outside of 430 allocated range in some rare cases. 431 432 4334.58 beta 2008-05-05 434------------------------- 435- ANSI-C LZMA Decoder was rewritten for speed optimizations. 436- ANSI-C LZMA Encoder was included to LZMA SDK. 437- C++ LZMA code now is just wrapper over ANSI-C code. 438 439 4404.57 2007-12-12 441------------------------- 442- Speed optimizations in �++ LZMA Decoder. 443- Small changes for more compatibility with some C/C++ compilers. 444 445 4464.49 beta 2007-07-05 447------------------------- 448- .7z ANSI-C Decoder: 449 - now it supports BCJ and BCJ2 filters 450 - now it supports files larger than 4 GB. 451 - now it supports "Last Write Time" field for files. 452- C++ code for .7z archives compressing/decompressing from 7-zip 453 was included to LZMA SDK. 454 455 4564.43 2006-06-04 457------------------------- 458- Small changes for more compatibility with some C/C++ compilers. 459 460 4614.42 2006-05-15 462------------------------- 463- Small changes in .h files in ANSI-C version. 464 465 4664.39 beta 2006-04-14 467------------------------- 468- The bug in versions 4.33b:4.38b was fixed: 469 C++ version of LZMA encoder could not correctly compress 470 files larger than 2 GB with HC4 match finder (-mfhc4). 471 472 4734.37 beta 2005-04-06 474------------------------- 475- Fixes in C++ code: code could no be compiled if _NO_EXCEPTIONS was defined. 476 477 4784.35 beta 2005-03-02 479------------------------- 480- The bug was fixed in C++ version of LZMA Decoder: 481 If encoded stream was corrupted, decoder could access memory 482 outside of allocated range. 483 484 4854.34 beta 2006-02-27 486------------------------- 487- Compressing speed and memory requirements for compressing were increased 488- LZMA now can use only these match finders: HC4, BT2, BT3, BT4 489 490 4914.32 2005-12-09 492------------------------- 493- Java version of LZMA SDK was included 494 495 4964.30 2005-11-20 497------------------------- 498- Compression ratio was improved in -a2 mode 499- Speed optimizations for compressing in -a2 mode 500- -fb switch now supports values up to 273 501- The bug in 7z_C (7zIn.c) was fixed: 502 It used Alloc/Free functions from different memory pools. 503 So if program used two memory pools, it worked incorrectly. 504- 7z_C: .7z format supporting was improved 505- LZMA# SDK (C#.NET version) was included 506 507 5084.27 (Updated) 2005-09-21 509------------------------- 510- Some GUIDs/interfaces in C++ were changed. 511 IStream.h: 512 ISequentialInStream::Read now works as old ReadPart 513 ISequentialOutStream::Write now works as old WritePart 514 515 5164.27 2005-08-07 517------------------------- 518- The bug in LzmaDecodeSize.c was fixed: 519 if _LZMA_IN_CB and _LZMA_OUT_READ were defined, 520 decompressing worked incorrectly. 521 522 5234.26 2005-08-05 524------------------------- 525- Fixes in 7z_C code and LzmaTest.c: 526 previous versions could work incorrectly, 527 if malloc(0) returns 0 528 529 5304.23 2005-06-29 531------------------------- 532- Small fixes in C++ code 533 534 5354.22 2005-06-10 536------------------------- 537- Small fixes 538 539 5404.21 2005-06-08 541------------------------- 542- Interfaces for ANSI-C LZMA Decoder (LzmaDecode.c) were changed 543- New additional version of ANSI-C LZMA Decoder with zlib-like interface: 544 - LzmaStateDecode.h 545 - LzmaStateDecode.c 546 - LzmaStateTest.c 547- ANSI-C LZMA Decoder now can decompress files larger than 4 GB 548 549 5504.17 2005-04-18 551------------------------- 552- New example for RAM->RAM compressing/decompressing: 553 LZMA + BCJ (filter for x86 code): 554 - LzmaRam.h 555 - LzmaRam.cpp 556 - LzmaRamDecode.h 557 - LzmaRamDecode.c 558 - -f86 switch for lzma.exe 559 560 5614.16 2005-03-29 562------------------------- 563- The bug was fixed in LzmaDecode.c (ANSI-C LZMA Decoder): 564 If _LZMA_OUT_READ was defined, and if encoded stream was corrupted, 565 decoder could access memory outside of allocated range. 566- Speed optimization of ANSI-C LZMA Decoder (now it's about 20% faster). 567 Old version of LZMA Decoder now is in file LzmaDecodeSize.c. 568 LzmaDecodeSize.c can provide slightly smaller code than LzmaDecode.c 569- Small speed optimization in LZMA C++ code 570- filter for SPARC's code was added 571- Simplified version of .7z ANSI-C Decoder was included 572 573 5744.06 2004-09-05 575------------------------- 576- The bug in v4.05 was fixed: 577 LZMA-Encoder didn't release output stream in some cases. 578 579 5804.05 2004-08-25 581------------------------- 582- Source code of filters for x86, IA-64, ARM, ARM-Thumb 583 and PowerPC code was included to SDK 584- Some internal minor changes 585 586 5874.04 2004-07-28 588------------------------- 589- More compatibility with some C++ compilers 590 591 5924.03 2004-06-18 593------------------------- 594- "Benchmark" command was added. It measures compressing 595 and decompressing speed and shows rating values. 596 Also it checks hardware errors. 597 598 5994.02 2004-06-10 600------------------------- 601- C++ LZMA Encoder/Decoder code now is more portable 602 and it can be compiled by GCC on Linux. 603 604 6054.01 2004-02-15 606------------------------- 607- Some detection of data corruption was enabled. 608 LzmaDecode.c / RangeDecoderReadByte 609 ..... 610 { 611 rd->ExtraBytes = 1; 612 return 0xFF; 613 } 614 615 6164.00 2004-02-13 617------------------------- 618- Original version of LZMA SDK 619 620 621 622HISTORY of the LZMA 623------------------- 624 2001-2008: Improvements to LZMA compressing/decompressing code, 625 keeping compatibility with original LZMA format 626 1996-2001: Development of LZMA compression format 627 628 Some milestones: 629 630 2001-08-30: LZMA compression was added to 7-Zip 631 1999-01-02: First version of 7-Zip was released 632 633 634End of document 635