1HISTORY of the LZMA SDK 2----------------------- 3 423.01 2023-06-20 5------------------------- 6- 7-Zip now can use new ARM64 filter for compression to 7z and xz archives. 7 ARM64 filter can increase compression ratio for data containing executable 8 files compiled for ARM64 (AArch64) architecture. 9 Also 7-Zip now parses executable files (that have exe and dll filename extensions) 10 before compressing, and it selects appropriate filter for each parsed file: 11 - BCJ or BCJ2 filter for x86 executable files, 12 - ARM64 filter for ARM64 executable files. 13 Previous versions by default used x86 filter BCJ or BCJ2 for all exe/dll files. 14- Default section size for BCJ2 filter was changed from 64 MiB to 240 MiB. 15 It can increase compression ratio for executable files larger than 64 MiB. 16- Some optimizations in filters code: BCJ, BCJ2, Swap* and opthers. 17- If 7-Zip uses BCJ2 filter for big datasets compressing, it can use additional temp 18 files in system's TEMP folder. 7-Zip uses temp file for additional compressed 19 data stream, if size of such compressed stream is larger than predefined limit: 20 16 MiB in 32-bit version, 4 GiB in 64-bit version. 21- When new 7-Zip creates multivolume archive, 7-Zip keeps in open state 22 only volumes that still can be changed. Previous versions kept all volumes 23 in open state until the end of the archive creation. 24- 7-Zip for Linux and macOS now can reduce the number of simultaneously open files, 25 when 7-Zip opens, extracts or creates multivolume archive. It allows to avoid 26 the failures for cases with big number of volumes, bacause there is a limitation 27 for number of open files allowed for a single program in Linux and macOS. 28- Some bugs were fixed. 29- Source code changes: 30- All external macros for compiling C/C++ code of 7-Zip now have Z7_ prefix. 31- 7-Zip COM interfaces now use new macros that allow to declare and implement COM interface. 32- The code has been modified to compile with the maximum diagnostic warning level: 33 -Wall in MSVC and -Weverything in CLANG. 34 And some warning types are disabled in 2 files: 35 - C/Compiler.h for C/C++ code warnings. 36 - CPP/Common/Common.h for C++ code warnings. 37- Linux/macOS versions of 7-Zip: IUnknown interface in new code doesn't use 38 virtual destructor that was used in previous 7-Zip and p7zip: 39 // virtual ~IUnknown() {} 40 So 7-Zip's dynamically linked shared libraries (codecs) are not compatible 41 between new 7-Zip for Linux/macOS and old 7-Zip (and p7zip). 42 43 4421.07 2021-12-26 45------------------------- 46- New switches: -spm and -im!{file_path} to exclude directories from processing 47 for specified paths that don't contain path separator character at the end of path. 48- The sorting order of files in archives was slightly changed to be more consistent 49 for cases where the name of some directory is the same as the prefix part of the name 50 of another directory or file. 51 52 5321.06 2021-11-24 54------------------------- 55- Bug in LZMA encoder in file LzmaEnc.c was fixed: 56 LzmaEnc_MemEncode(), LzmaEncode() and LzmaCompress() could work incorrectly, 57 if size value for output buffer is smaller than size required for all compressed data. 58 LzmaEnc_Encode() could work incorrectly, 59 if callback ISeqOutStream::Write() doesn't write all compressed data. 60 NCompress::NLzma::CEncoder::Code() could work incorrectly, 61 if callback ISequentialOutStream::Write() returns error code. 62- Bug in versions 21.00-21.05 was fixed: 63 7-Zip didn't set attributes of directories during archive extracting. 64 65 6621.04 beta 2021-11-02 67------------------------- 68- 7-Zip now reduces the number of working CPU threads for compression, 69 if RAM size is not enough for compression with big LZMA2 dictionary. 70- 7-Zip now can create and check "file.sha256" text files that contain the list 71 of file names and SHA-256 checksums in format compatible with sha256sum program. 72 73 7421.03 beta 2021-07-20 75------------------------- 76- The maximum dictionary size for LZMA/LZMA2 compressing was increased to 4 GB (3840 MiB). 77- Minor speed optimizations in LZMA/LZMA2 compressing. 78 79 8021.02 alpha 2021-05-06 81------------------------- 82- The command line version of 7-Zip for macOS was released. 83- The speed for LZMA and LZMA2 decompression in arm64 versions for macOS and Linux 84 was increased by 20%-60%. 85 86 8721.01 alpha 2021-03-09 88------------------------- 89- The command line version of 7-Zip for Linux was released. 90- The improvements for speed of ARM64 version using hardware CPU instructions 91 for AES, CRC-32, SHA-1 and SHA-256. 92- Some bugs were fixed. 93 94 9520.02 alpha 2020-08-08 96------------------------- 97- The default number of LZMA2 chunks per solid block in 7z archive was increased to 64. 98 It allows to increase the compression speed for big 7z archives, if there is a big number 99 of CPU cores and threads. 100- The speed of PPMd compressing/decompressing was increased for 7z archives. 101- The new -ssp switch. If the switch -ssp is specified, 7-Zip doesn't allow the system 102 to modify "Last Access Time" property of source files for archiving and hashing operations. 103- Some bugs were fixed. 104 105 10620.00 alpha 2020-02-06 107------------------------- 108- 7-Zip now supports new optional match finders for LZMA/LZMA2 compression: bt5 and hc5, 109 that can work faster than bt4 and hc4 match finders for the data with big redundancy. 110- The compression ratio was improved for Fast and Fastest compression levels with the 111 following default settings: 112 - Fastest level (-mx1) : hc5 match finder with 256 KB dictionary. 113 - Fast level (-mx3) : hc5 match finder with 4 MB dictionary. 114- Minor speed optimizations in multithreaded LZMA/LZMA2 compression for Normal/Maximum/Ultra 115 compression levels. 116 117 11819.00 2019-02-21 119------------------------- 120- Encryption strength for 7z archives was increased: 121 the size of random initialization vector was increased from 64-bit to 128-bit, 122 and the pseudo-random number generator was improved. 123- The bug in 7zIn.c code was fixed. 124 125 12618.06 2018-12-30 127------------------------- 128- The speed for LZMA/LZMA2 compressing was increased by 3-10%, 129 and there are minor changes in compression ratio. 130- Some bugs were fixed. 131- The bug in 7-Zip 18.02-18.05 was fixed: 132 There was memory leak in multithreading xz decoder - XzDecMt_Decode(), 133 if xz stream contains only one block. 134- The changes for MSVS compiler makefiles: 135 - the makefiles now use "PLATFORM" macroname with values (x64, x86, arm64) 136 instead of "CPU" macroname with values (AMD64, ARM64). 137 - the makefiles by default now use static version of the run-time library. 138 139 14018.05 2018-04-30 141------------------------- 142- The speed for LZMA/LZMA2 compressing was increased 143 by 8% for fastest/fast compression levels and 144 by 3% for normal/maximum compression levels. 145- Previous versions of 7-Zip could work incorrectly in "Large memory pages" mode in 146 Windows 10 because of some BUG with "Large Pages" in Windows 10. 147 Now 7-Zip doesn't use "Large Pages" on Windows 10 up to revision 1709 (16299). 148- The BUG was fixed in Lzma2Enc.c 149 Lzma2Enc_Encode2() function worked incorretly, 150 if (inStream == NULL) and the number of block threads is more than 1. 151 152 15318.03 beta 2018-03-04 154------------------------- 155- Asm\x86\LzmaDecOpt.asm: new optimized LZMA decoder written in asm 156 for x64 with about 30% higher speed than main version of LZMA decoder written in C. 157- The speed for single-thread LZMA/LZMA2 decoder written in C was increased by 3%. 158- 7-Zip now can use multi-threading for 7z/LZMA2 decoding, 159 if there are multiple independent data chunks in LZMA2 stream. 160- 7-Zip now can use multi-threading for xz decoding, 161 if there are multiple blocks in xz stream. 162 163 16418.01 2019-01-28 165------------------------- 166- The BUG in 17.01 - 18.00 beta was fixed: 167 XzDec.c : random block unpacking and XzUnpacker_IsBlockFinished() 168 didn't work correctly for xz archives without checksum (CRC). 169 170 17118.00 beta 2019-01-10 172------------------------- 173- The BUG in xz encoder was fixed: 174 There was memory leak of 16 KB for each file compressed with 175 xz compression method, if additional filter was used. 176 177 17817.01 beta 2017-08-28 179------------------------- 180- Minor speed optimization for LZMA2 (xz and 7z) multi-threading compression. 181 7-Zip now uses additional memory buffers for multi-block LZMA2 compression. 182 CPU utilization was slightly improved. 183- 7-zip now creates multi-block xz archives by default. Block size can be 184 specified with -ms[Size]{m|g} switch. 185- xz decoder now can unpack random block from multi-block xz archives. 186- 7-Zip command line: @listfile now doesn't work after -- switch. 187 Use -i@listfile before -- switch instead. 188- The BUGs were fixed: 189 7-Zip 17.00 beta crashed for commands that write anti-item to 7z archive. 190 191 19217.00 beta 2017-04-29 193------------------------- 194- NewHandler.h / NewHandler.cpp: 195 now it redefines operator new() only for old MSVC compilers (_MSC_VER < 1900). 196- C/7zTypes.h : the names of variables in interface structures were changed (vt). 197- Some bugs were fixed. 7-Zip could crash in some cases. 198- Some internal changes in code. 199 200 20116.04 2016-10-04 202------------------------- 203- The bug was fixed in DllSecur.c. 204 205 20616.03 2016-09-28 207------------------------- 208- SFX modules now use some protection against DLL preloading attack. 209- Some bugs in 7z code were fixed. 210 211 21216.02 2016-05-21 213------------------------- 214- The BUG in 16.00 - 16.01 was fixed: 215 Split Handler (SplitHandler.cpp) returned incorrect 216 total size value (kpidSize) for split archives. 217 218 21916.01 2016-05-19 220------------------------- 221- Some internal changes to reduce the number of compiler warnings. 222 223 22416.00 2016-05-10 225------------------------- 226- Some bugs were fixed. 227 228 22915.12 2015-11-19 230------------------------- 231- The BUG in C version of 7z decoder was fixed: 232 7zDec.c : SzDecodeLzma2() 233 7z decoder could mistakenly report about decoding error for some 7z archives 234 that use LZMA2 compression method. 235 The probability to get that mistaken decoding error report was about 236 one error per 16384 solid blocks for solid blocks larger than 16 KB (compressed size). 237- The BUG (in 9.26-15.11) in C version of 7z decoder was fixed: 238 7zArcIn.c : SzReadHeader2() 239 7z decoder worked incorrectly for 7z archives that contain 240 empty solid blocks, that can be placed to 7z archive, if some file is 241 unavailable for reading during archive creation. 242 243 24415.09 beta 2015-10-16 245------------------------- 246- The BUG in LZMA / LZMA2 encoding code was fixed. 247 The BUG in LzFind.c::MatchFinder_ReadBlock() function. 248 If input data size is larger than (4 GiB - dictionary_size), 249 the following code worked incorrectly: 250 - LZMA : LzmaEnc_MemEncode(), LzmaEncode() : LZMA encoding functions 251 for compressing from memory to memory. 252 That BUG is not related to LZMA encoder version that works via streams. 253 - LZMA2 : multi-threaded version of LZMA2 encoder worked incorrectly, if 254 default value of chunk size (CLzma2EncProps::blockSize) is changed 255 to value larger than (4 GiB - dictionary_size). 256 257 2589.38 beta 2015-01-03 259------------------------- 260- The BUG in 9.31-9.37 was fixed: 261 IArchiveGetRawProps interface was disabled for 7z archives. 262- The BUG in 9.26-9.36 was fixed: 263 Some code in CPP\7zip\Archive\7z\ worked correctly only under Windows. 264 265 2669.36 beta 2014-12-26 267------------------------- 268- The BUG in command line version was fixed: 269 7-Zip created temporary archive in current folder during update archive 270 operation, if -w{Path} switch was not specified. 271 The fixed 7-Zip creates temporary archive in folder that contains updated archive. 272- The BUG in 9.33-9.35 was fixed: 273 7-Zip silently ignored file reading errors during 7z or gz archive creation, 274 and the created archive contained only part of file that was read before error. 275 The fixed 7-Zip stops archive creation and it reports about error. 276 277 2789.35 beta 2014-12-07 279------------------------- 280- 7zr.exe now support AES encryption. 281- SFX mudules were added to LZMA SDK 282- Some bugs were fixed. 283 284 2859.21 beta 2011-04-11 286------------------------- 287- New class FString for file names at file systems. 288- Speed optimization in CRC code for big-endian CPUs. 289- The BUG in Lzma2Dec.c was fixed: 290 Lzma2Decode function didn't work. 291 292 2939.18 beta 2010-11-02 294------------------------- 295- New small SFX module for installers (SfxSetup). 296 297 2989.12 beta 2010-03-24 299------------------------- 300- The BUG in LZMA SDK 9.* was fixed: LZMA2 codec didn't work, 301 if more than 10 threads were used (or more than 20 threads in some modes). 302 303 3049.11 beta 2010-03-15 305------------------------- 306- PPMd compression method support 307 308 3099.09 2009-12-12 310------------------------- 311- The bug was fixed: 312 Utf16_To_Utf8 funstions in UTFConvert.cpp and 7zMain.c 313 incorrectly converted surrogate characters (the code >= 0x10000) to UTF-8. 314- Some bugs were fixed 315 316 3179.06 2009-08-17 318------------------------- 319- Some changes in ANSI-C 7z Decoder interfaces. 320 321 3229.04 2009-05-30 323------------------------- 324- LZMA2 compression method support 325- xz format support 326 327 3284.65 2009-02-03 329------------------------- 330- Some minor fixes 331 332 3334.63 2008-12-31 334------------------------- 335- Some minor fixes 336 337 3384.61 beta 2008-11-23 339------------------------- 340- The bug in ANSI-C LZMA Decoder was fixed: 341 If encoded stream was corrupted, decoder could access memory 342 outside of allocated range. 343- Some changes in ANSI-C 7z Decoder interfaces. 344- LZMA SDK is placed in the public domain. 345 346 3474.60 beta 2008-08-19 348------------------------- 349- Some minor fixes. 350 351 3524.59 beta 2008-08-13 353------------------------- 354- The bug was fixed: 355 LZMA Encoder in fast compression mode could access memory outside of 356 allocated range in some rare cases. 357 358 3594.58 beta 2008-05-05 360------------------------- 361- ANSI-C LZMA Decoder was rewritten for speed optimizations. 362- ANSI-C LZMA Encoder was included to LZMA SDK. 363- C++ LZMA code now is just wrapper over ANSI-C code. 364 365 3664.57 2007-12-12 367------------------------- 368- Speed optimizations in �++ LZMA Decoder. 369- Small changes for more compatibility with some C/C++ compilers. 370 371 3724.49 beta 2007-07-05 373------------------------- 374- .7z ANSI-C Decoder: 375 - now it supports BCJ and BCJ2 filters 376 - now it supports files larger than 4 GB. 377 - now it supports "Last Write Time" field for files. 378- C++ code for .7z archives compressing/decompressing from 7-zip 379 was included to LZMA SDK. 380 381 3824.43 2006-06-04 383------------------------- 384- Small changes for more compatibility with some C/C++ compilers. 385 386 3874.42 2006-05-15 388------------------------- 389- Small changes in .h files in ANSI-C version. 390 391 3924.39 beta 2006-04-14 393------------------------- 394- The bug in versions 4.33b:4.38b was fixed: 395 C++ version of LZMA encoder could not correctly compress 396 files larger than 2 GB with HC4 match finder (-mfhc4). 397 398 3994.37 beta 2005-04-06 400------------------------- 401- Fixes in C++ code: code could no be compiled if _NO_EXCEPTIONS was defined. 402 403 4044.35 beta 2005-03-02 405------------------------- 406- The bug was fixed in C++ version of LZMA Decoder: 407 If encoded stream was corrupted, decoder could access memory 408 outside of allocated range. 409 410 4114.34 beta 2006-02-27 412------------------------- 413- Compressing speed and memory requirements for compressing were increased 414- LZMA now can use only these match finders: HC4, BT2, BT3, BT4 415 416 4174.32 2005-12-09 418------------------------- 419- Java version of LZMA SDK was included 420 421 4224.30 2005-11-20 423------------------------- 424- Compression ratio was improved in -a2 mode 425- Speed optimizations for compressing in -a2 mode 426- -fb switch now supports values up to 273 427- The bug in 7z_C (7zIn.c) was fixed: 428 It used Alloc/Free functions from different memory pools. 429 So if program used two memory pools, it worked incorrectly. 430- 7z_C: .7z format supporting was improved 431- LZMA# SDK (C#.NET version) was included 432 433 4344.27 (Updated) 2005-09-21 435------------------------- 436- Some GUIDs/interfaces in C++ were changed. 437 IStream.h: 438 ISequentialInStream::Read now works as old ReadPart 439 ISequentialOutStream::Write now works as old WritePart 440 441 4424.27 2005-08-07 443------------------------- 444- The bug in LzmaDecodeSize.c was fixed: 445 if _LZMA_IN_CB and _LZMA_OUT_READ were defined, 446 decompressing worked incorrectly. 447 448 4494.26 2005-08-05 450------------------------- 451- Fixes in 7z_C code and LzmaTest.c: 452 previous versions could work incorrectly, 453 if malloc(0) returns 0 454 455 4564.23 2005-06-29 457------------------------- 458- Small fixes in C++ code 459 460 4614.22 2005-06-10 462------------------------- 463- Small fixes 464 465 4664.21 2005-06-08 467------------------------- 468- Interfaces for ANSI-C LZMA Decoder (LzmaDecode.c) were changed 469- New additional version of ANSI-C LZMA Decoder with zlib-like interface: 470 - LzmaStateDecode.h 471 - LzmaStateDecode.c 472 - LzmaStateTest.c 473- ANSI-C LZMA Decoder now can decompress files larger than 4 GB 474 475 4764.17 2005-04-18 477------------------------- 478- New example for RAM->RAM compressing/decompressing: 479 LZMA + BCJ (filter for x86 code): 480 - LzmaRam.h 481 - LzmaRam.cpp 482 - LzmaRamDecode.h 483 - LzmaRamDecode.c 484 - -f86 switch for lzma.exe 485 486 4874.16 2005-03-29 488------------------------- 489- The bug was fixed in LzmaDecode.c (ANSI-C LZMA Decoder): 490 If _LZMA_OUT_READ was defined, and if encoded stream was corrupted, 491 decoder could access memory outside of allocated range. 492- Speed optimization of ANSI-C LZMA Decoder (now it's about 20% faster). 493 Old version of LZMA Decoder now is in file LzmaDecodeSize.c. 494 LzmaDecodeSize.c can provide slightly smaller code than LzmaDecode.c 495- Small speed optimization in LZMA C++ code 496- filter for SPARC's code was added 497- Simplified version of .7z ANSI-C Decoder was included 498 499 5004.06 2004-09-05 501------------------------- 502- The bug in v4.05 was fixed: 503 LZMA-Encoder didn't release output stream in some cases. 504 505 5064.05 2004-08-25 507------------------------- 508- Source code of filters for x86, IA-64, ARM, ARM-Thumb 509 and PowerPC code was included to SDK 510- Some internal minor changes 511 512 5134.04 2004-07-28 514------------------------- 515- More compatibility with some C++ compilers 516 517 5184.03 2004-06-18 519------------------------- 520- "Benchmark" command was added. It measures compressing 521 and decompressing speed and shows rating values. 522 Also it checks hardware errors. 523 524 5254.02 2004-06-10 526------------------------- 527- C++ LZMA Encoder/Decoder code now is more portable 528 and it can be compiled by GCC on Linux. 529 530 5314.01 2004-02-15 532------------------------- 533- Some detection of data corruption was enabled. 534 LzmaDecode.c / RangeDecoderReadByte 535 ..... 536 { 537 rd->ExtraBytes = 1; 538 return 0xFF; 539 } 540 541 5424.00 2004-02-13 543------------------------- 544- Original version of LZMA SDK 545 546 547 548HISTORY of the LZMA 549------------------- 550 2001-2008: Improvements to LZMA compressing/decompressing code, 551 keeping compatibility with original LZMA format 552 1996-2001: Development of LZMA compression format 553 554 Some milestones: 555 556 2001-08-30: LZMA compression was added to 7-Zip 557 1999-01-02: First version of 7-Zip was released 558 559 560End of document 561