HISTORY of the LZMA SDK
-----------------------

4.65           2009-02-03
-------------------------
- Some minor fixes


4.63           2008-12-31
-------------------------
- Some minor fixes


4.61 beta      2008-11-23
-------------------------
- The bug in ANSI-C LZMA Decoder was fixed:
    If encoded stream was corrupted, decoder could access memory
    outside of allocated range.
- Some changes in ANSI-C 7z Decoder interfaces.
- LZMA SDK is placed in the public domain.


4.60 beta      2008-08-19
-------------------------
- Some minor fixes.


4.59 beta      2008-08-13
-------------------------
- The bug was fixed:
    LZMA Encoder in fast compression mode could access memory outside of
    allocated range in some rare cases.


4.58 beta      2008-05-05
-------------------------
- ANSI-C LZMA Decoder was rewritten for speed optimizations.
- ANSI-C LZMA Encoder was included to LZMA SDK.
- C++ LZMA code now is just wrapper over ANSI-C code.


4.57           2007-12-12
-------------------------
- Speed optimizations in Ñ++ LZMA Decoder.
- Small changes for more compatibility with some C/C++ compilers.


4.49 beta      2007-07-05
-------------------------
- .7z ANSI-C Decoder:
     - now it supports BCJ and BCJ2 filters
     - now it supports files larger than 4 GB.
     - now it supports "Last Write Time" field for files.
- C++ code for .7z archives compressing/decompressing from 7-zip
  was included to LZMA SDK.


4.43           2006-06-04
-------------------------
- Small changes for more compatibility with some C/C++ compilers.


4.42           2006-05-15
-------------------------
- Small changes in .h files in ANSI-C version.


4.39 beta      2006-04-14
-------------------------
- The bug in versions 4.33b:4.38b was fixed:
  C++ version of LZMA encoder could not correctly compress
  files larger than 2 GB with HC4 match finder (-mfhc4).


4.37 beta      2005-04-06
-------------------------
- Fixes in C++ code: code could no be compiled if _NO_EXCEPTIONS was defined.


4.35 beta      2005-03-02
-------------------------
- The bug was fixed in C++ version of LZMA Decoder:
    If encoded stream was corrupted, decoder could access memory
    outside of allocated range.


4.34 beta      2006-02-27
-------------------------
- Compressing speed and memory requirements for compressing were increased
- LZMA now can use only these match finders: HC4, BT2, BT3, BT4


4.32           2005-12-09
-------------------------
- Java version of LZMA SDK was included


4.30           2005-11-20
-------------------------
- Compression ratio was improved in -a2 mode
- Speed optimizations for compressing in -a2 mode
- -fb switch now supports values up to 273
- The bug in 7z_C (7zIn.c) was fixed:
  It used Alloc/Free functions from different memory pools.
  So if program used two memory pools, it worked incorrectly.
- 7z_C: .7z format supporting was improved
- LZMA# SDK (C#.NET version) was included


4.27 (Updated) 2005-09-21
-------------------------
- Some GUIDs/interfaces in C++ were changed.
 IStream.h:
   ISequentialInStream::Read now works as old ReadPart
   ISequentialOutStream::Write now works as old WritePart


4.27           2005-08-07
-------------------------
- The bug in LzmaDecodeSize.c was fixed:
   if _LZMA_IN_CB and _LZMA_OUT_READ were defined,
   decompressing worked incorrectly.


4.26           2005-08-05
-------------------------
- Fixes in 7z_C code and LzmaTest.c:
  previous versions could work incorrectly,
  if malloc(0) returns 0


4.23           2005-06-29
-------------------------
- Small fixes in C++ code


4.22           2005-06-10
-------------------------
- Small fixes


4.21           2005-06-08
-------------------------
- Interfaces for ANSI-C LZMA Decoder (LzmaDecode.c) were changed
- New additional version of ANSI-C LZMA Decoder with zlib-like interface:
    - LzmaStateDecode.h
    - LzmaStateDecode.c
    - LzmaStateTest.c
- ANSI-C LZMA Decoder now can decompress files larger than 4 GB


4.17           2005-04-18
-------------------------
- New example for RAM->RAM compressing/decompressing:
  LZMA + BCJ (filter for x86 code):
    - LzmaRam.h
    - LzmaRam.cpp
    - LzmaRamDecode.h
    - LzmaRamDecode.c
    - -f86 switch for lzma.exe


4.16           2005-03-29
-------------------------
- The bug was fixed in LzmaDecode.c (ANSI-C LZMA Decoder):
   If _LZMA_OUT_READ was defined, and if encoded stream was corrupted,
   decoder could access memory outside of allocated range.
- Speed optimization of ANSI-C LZMA Decoder (now it's about 20% faster).
  Old version of LZMA Decoder now is in file LzmaDecodeSize.c.
  LzmaDecodeSize.c can provide slightly smaller code than LzmaDecode.c
- Small speed optimization in LZMA C++ code
- filter for SPARC's code was added
- Simplified version of .7z ANSI-C Decoder was included


4.06           2004-09-05
-------------------------
- The bug in v4.05 was fixed:
    LZMA-Encoder didn't release output stream in some cases.


4.05           2004-08-25
-------------------------
- Source code of filters for x86, IA-64, ARM, ARM-Thumb
  and PowerPC code was included to SDK
- Some internal minor changes


4.04           2004-07-28
-------------------------
- More compatibility with some C++ compilers


4.03           2004-06-18
-------------------------
- "Benchmark" command was added. It measures compressing
  and decompressing speed and shows rating values.
  Also it checks hardware errors.


4.02           2004-06-10
-------------------------
- C++ LZMA Encoder/Decoder code now is more portable
  and it can be compiled by GCC on Linux.


4.01           2004-02-15
-------------------------
- Some detection of data corruption was enabled.
    LzmaDecode.c / RangeDecoderReadByte
    .....
    {
      rd->ExtraBytes = 1;
      return 0xFF;
    }


4.00           2004-02-13
-------------------------
- Original version of LZMA SDK



HISTORY of the LZMA
-------------------
  2001-2008:  Improvements to LZMA compressing/decompressing code,
              keeping compatibility with original LZMA format
  1996-2001:  Development of LZMA compression format

  Some milestones:

  2001-08-30: LZMA compression was added to 7-Zip
  1999-01-02: First version of 7-Zip was released


End of document
