Be notified of new releases
Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 28 million developers.Sign up
With the move to .NET Standard and the re-licensing to MIT, effort has been put into creating a stable v1.0 API for SharpZipLib.
Major changes since 0.86:
- The targeted frameworks are now:
- .NET Standard 2.0
netstandard2(Core 2.0+, FW 4.6.1+, Mono 5.2+, UWP 16299)
- .NET Framework 4.5
net45(Mono 4, Dependency-free on Windows 8+/2012+)
See .NET implementation support
- .NET Standard 2.0
- The library is now released under the MIT license. See Issue #103.
- The legacy Stream API has been replaced by the IDisposable pattern. (Stream.Close() calls Dispose(true) by default, so it should be backwards compatible.
See Stream.Close Method.
- Encoding now works more predictably, defaulting to UTF-8 encoding and correctly specifying it as such.
See [[ZipStrings and Unicode]].
FastZipnow prevents traversal outside of the target directory when extracting unless this is explicitly allowed. See Restrict path traversal on FastZip extraction
ICSharpCode.SharpZipLib.Checksumsnamespace has been renamed
For more detailed notes, see Pre-release version notes.
ZipEntry.IsUnicodeTextnow defaults to
ZipConstants.DefaultCodePageis now called
ZipStrings.CodePage(but backwards-compatible wrappers exists on
For more information, see ZipStrings and Unicode
- Supported frameworks are now NET45 and NETSTANDARD2
- #232 SECURITY: vulnerable to zip-slip (possible remote code execution/file overwrite)
- #164 System.NotSupportedException when zipping more than ~4.2 gb of data to a stream that doesn't support seeking
- #229 TestArchive hangs
- #121 TAR in ustar format with long file names: TarEntry name is incomplete
- #151 GZip.Compress ArgumentOutOfRangeException:bufferSize
- #183 0 byte buffers writing 0 bytes fails CRC
- #213 Tar does not read the same number of blocks as it wrote - causes potential socket issues
Changes for 0.86.0
- Multi-member gzip files are now supported. Contributed by Geoff Hart.
- Zero byte files caused ZipOutputStream to create invalid zipfiles. Contributed by Mark Ritchie.
- ZipFile.CommitUpdate failed on ODT (Open Document) files when updating in memory. Contributed by Dricks.
- Exceptions occurring within ZipFile.CommitUpdate were being silently discarded.
- In FastZip, the NameFilter erroneously removed all escapes from regex. Contributed by John Lemberger.
Note: This is a breaking change - if you had detoured this filter bug via doubled-up backslashes,
please halve them - for example change @"\myextract.txt$" to @"\myextract.txt$", or
change "\\myextract.txt$" to "\myextract.txt$".
- AES Encryption and Decryption is now supported.
- TarArchive now has IsStreamOwner property, for use with MemoryStream.
- Removed exception "Extra data contains Zip64 information but version 2.0 is not high enough" due to rogue zip creators.
- FastZip.ExtractZip now accepts an Input Stream.
- Zip input and output streams can now specify buffer sizes.
- Solved "NTFS Extra data invalid" exception when reading zip files with zero-length NTFS ExtraData entry.
- Fixed "Size mismatch" exceptions reading zips created by SharpZipLib with an explicit entry CRC and Size.
Changes for 0.85.5
- Fix for unreferenced ZipFile causing read failure after garbage collection.
- Fix to ZipInputStream.CloseEntry were skipping could fail for long values.
- Potential race condition flaw in FastZip event handling fixed up.
- Wrong exceptions being thrown and wrong arguments for some exceptions fixed.
- TarArchive handling tweaked so creation of archive with Tar streams is handled cleanly
- ZipFile Testing now handles directories better.
- DeflatorEngine altered so TotalIn is long.
- ZipInputStream handles initial reading for entries with no data better.
- Updates to unit tests
- BZip2Constants made internal. A breaking change in theory but no-one should be using these values.
- BZip2 QSort3 optimised somewhat by changing StackElement from class to struct as per lytico suggestion.
- Name filters allow quoting of ';' characters using ;
- Fix GZIP flag checking bug
- ArgumentNull instead of NullReference in tar header now thrown.
- WindowsNameTransform now used in fastzip
- Disposed checking in ZipFile beefed up.
- Bug in entry handling for stored entries and sizing fixed.
- Zip entries with zero bytes written optimised.
- TarBuffer.IsEofBlock made obsolete use static TarBuffer.IsEndOfArchiveBlock instead.
- GZip Finish and Close no longer add extra footers. Close can be called twice without exception. Writes after finish/close now fail.
- Fastzip now throws exceptions if they are 'handled' via delegates.
Changes for 0.85.4
- Fix for encryption going awol in Zip archives sometimes
- Help files updated and now generated by Sandcastle Help File Builder
Changes for 0.85.3
- Extended unit tests in many areas.
- Fixed GZip reading of streams larger then 2^32.
- Windows date time now handled in ExtraData.
- Extensions to extra data handling.
- Encrypting stored entries no longer consumes arbitrary amounts of memory.
- DeflatorOutputStream now uses CryptoTransform
- ZipInputStream detection of invalid sizes improved.
- ZipHelperStream reading end of stream values now correctly handled
- ZipHelperStream now supports reading/writing data descriptors.
- ZipFile testing data now handles data descriptors.
- ZipFile adding entries now correctly handles data descriptors.
- ZipFile now defaults to dynamic use of Zip64.
- ZipEntryFactory class made public and bugs fixed.
- ZipEntry DateTime handling cleaned up - Zero is treated as fixed low value and high values checked and handled.
- Added progress event handling to FastZip.
Changes for 0.85.2.329
- Minor tweaks for CF, ZipEntryFactory and ZipFile.
- Fix for zip testing and Zip64 local header patching.
- FastZip revamped to handle file attributes on extract + other fixes
- Null ref in path filter fixed.
- Extra data handling fixes
- Revamped build and conditional compilation handling
- Many bug fixes for Zip64.
- Minor improvements to C# samples.
- ZIP-1341 Non ascii zip password handling fix.
- ZIP-355 Fix for zip compression problem at low levels
Changes for v0.85.1.271
- BREAKING CHANGE: Zip name transform implementations and other classes no longer directly support non-relative paths.
- Update to Compact Framework handling to cater for CF 2.0 as well as 1.0 (minus encryption for 1.0)
- Fix for Zip64 descriptor handling.
- Zip64 handling altered to default to "Zip32" for compatability.
- Add preliminary implementation for handlng of full unicode names.
- Fix up encryption handling for ZipFile during updates.
- Fix for updating bug were comment is the only thing updated.
- Add IEntryFactory interface and default implementation. Used in FastZip class currently.
- ZIP-1216 GZipOutputStream header writing delayed allowing the class to be used with HTTP and IIS (via HttpResponse.Filter). This was supposed to be fixed in 0.6 but was ommited.
- ZIP-149 SVN Revision number incorporated in builds.
- ZIP-1245 CF Build support added
Changes for v0.85
- Mod time written in gzip header corrected.
- Fix for ZipInputStream where closing an open entry wasnt handling all cases correctly.
- Add support for Zip64 handling to both streams and ZipFile classes.
- Add ability to modify an existing archive to ZipFile class.
- Limited FxCop cleanups
- TarArchive and others made IDisposable.
- TarOutputStream end-of-file garbage data problem fixed.
- Zip archive no longer performs zero writes which can cause problems.
- A bundle of minor bug fixes particularly in the Zip area.
- Enhanced testing facilities in ZipFile class to allow feedback.
Known issues fixed.
- ZIP-975 BZip Compress and Decompress stream handling inconsistent.
- ZIP-517 Stored entry handling were descriptors are specified in flags.
- ZIP-514 FastZip not firing File/Directory Failure.
- ZIP-513 HttpResponse exception when writing 0 bytes.
- ZIP-506 Decryption fails for entry with extended time.
- ZIP-174 Exception on zero length entries.