🚀 Minor release, mainly to address the incorrect file version of v1.3.0, but also contains some security fixes and performance improvements.
- 🔒 Security fixes for
- 👌 Improved CRC32 performance
- 👍 BZip2 compression support for Zip files
- ⚡️ [#475] Fix updating zips with descriptor entries by Richard Webb & nils måsén
- 🐎 [#516] Improve CRC32 performance by Nelson Gomez
- [#538] Use RNGCryptoServiceProvider for crypto headers by nils måsén
- [#539] Use securely generated random temporary file names by nils måsén
- [#509] Make PutNextEntry throw if the entry is AES and no password has been set by Richard Webb
Other changes (not related to library code)
- 🚀 [#541] Update csproj for new release by nils måsén
- [#530] Fix Codacy Workflows by nils måsén
- 🚀 [#529] Add release workflow by nils måsén
- 🚚 [#511] Move the 7zip helper functions into their own class for easier reuse by Richard Webb
- 🚀 [#525] Update the sample projects to use the v1.3 release by Richard Webb
- 📦 [#522] Use PackageIcon instead of PackageIconUrl in csproj by nils måsén
- [#523] Fix Codacy workflows by nils måsén
- 🛠 AES encryption fixes and support in FastZip
- 👍 File name encoding support for Tar
- 👌 Improved Unix timestamp support
- 👍 Better handling of entry file names
- 🛠 Fix errors with entries using Stored compression method
TarArchive.ExtractContents()now needs another parameter set to
trueto allow the extraction to traverse outside of the target directory.
TarArchiveconstructors now includes an
Encodingparameter. Omitting it will discard any non-ASCII bytes in file names.
- ✅ [#503] Consider AES overhead when testing encrypted folder entries by Richard Webb
- [#452] Ensure crypto streams are disposed in ZipFile.GetOutputStream by Richard Webb
- 👍 [#333] Handle unsupported compression methods in ZipInputStream better by Richard Webb
- ⚡️ [#402] Only convert entry.Name once when accessing updateIndex by Vladyslav Taranov
- ✅ [#353] Fix ZipFile.TestLocalHeader CompressionMethod resolving for AES entries by Richard Webb
- [#460] Account for AES overhead in compressed entry size by Richard Webb
- [#422] Change ZipOutputStream.PutNextEntry to explicity validate the requested compression method by Richard Webb
- 👀 [#467] Allow seeking a PartialInputStream to the very end by Víctor M. González
- [#440] Use CompressionMethodForHeader for header entries by Richard Webb
- 👍 [#420] Throw NotSupportedException in ZipFile.Add when trying to add AES entry by Richard Webb
- [#421] Have ZipFile.Add validate compression compability internally by Richard Webb
- 👍 [#387] Better handle baseStreams closing themselves unexpectedly by Richard Webb
- 🛠 [#408] When searching for the Zip64 end of central directory locator, pay attention to its fixed size by Richard Webb
- [#406] Skip forced Deflate flush when using Stored compression by nils måsén
- [#362] Don't call CleanName from the ZipEntry constructor by Richard Webb
- [#465] Use correct count in ZipAESStream.ReadBufferedData by Víctor M. González
- [#390] Ensure GZipOutputStream headers are written before flush by Richard Webb
- [#498] Use string.Trim to trim strings by Richard Webb
- [#432] Throw ArgumentNullException in BZip2 by Richard Webb
- [#519] Restrict path traversal on TarArchive extraction by nils måsén
- [#201] Raise ProcessDirectory event for FastZip extract by Stevie-O
- 👍 [#380] Add support for AES encryption in FastZip.CreateZip by Richard Webb
- [#497] Transform new entry names using an INameTranform in ZipOutputStream by Richard Webb
- [#482] Add variants of FastZip.CreateZip taking IScanFilter instead of strings by Richard Webb
- [#455] Add FastZip.CreateZip with a leaveOpen parameter by Richard Webb
- ⏪ [#433] Restore directory timestamps when extracting with FastZip by Richard Webb
- [#472] Allow ZipFile to accept empty strings as passwords when decrypting AES entries by Richard Webb
- [#364] Add nameEncoding parameter to Tar entries by Yusuke Ito
- 👍 [#463] Improve support for Unix timestamps in ZIP archives by Bastian Eicher
Other changes (not related to library code)
- 🔒 [#346] Add a Security Policy by nils måsén
- ⚡️ [#451] Minimize and update sample app package dependencies by Richard Webb
- ✅ [#505] Expect ZipEntry clean name test to be positive by nils måsén
- ⚠ [#504] Fix warning about missing doc comment in FastZip.CreateZip by Richard Webb
- ⚡️ [#374] Update Docs generation by nils måsén
- 🚚 [#431] Remove the link to the sharpdevelop forum from readme.md by Richard Webb
- 🚀 [#425] Update Microsoft.SourceLink.GitHub to the 1.0.0 release version by Richard Webb
- ⚠ [#483] Suppress CA1707 warnings from LzwConstants by Richard Webb
- [#458] Dispose of entry streams returned by ZipFile.GetInputStream by Richard Webb
- [#488] Add [MemoryDiagnoser] to the zip input/output stream benchmark classes by Richard Webb
- 🚚 [#489] Remove duplicate ICSharpCode.SharpZipLib.snk by Richard Webb
- ✅ [#494] Use the Range to test different compression levels in InflaterDeflaterTestSuite by Richard Webb
- ✅ [#502] Fix tests and ZipEntry DateTime Kind by nils måsén
- 🚚 [#476] Remove duplicated words in comments by Richard Webb
- [#477] Fix spelling errors in comments by Richard Webb
- ⚡️ [#479] Streamline and update VB sample projects by Richard Webb
- [#445] Make InvalidHeaderException serializable by Richard Webb
- ⚠ [#450] Fix CA1200 code analyzer warnings by Richard Webb
- ✅ [#435] Add unit test for ZipFile.Add(string fileName, string entryName) by Richard Webb
- ✅ [#448] Fix unit test assert argument order by Richard Webb
- 👻 [#461] Fix Exception doc comments by Richard Webb
- 🏗 [#453] Fix the 7-zip interop tests in the .Net 4.6 test build by Richard Webb
- ✅ [#466] Improve the ZipFileStoreAesPartialRead test to test multiple block sizes by Richard Webb
- ✅ [#468] Add test for adding empty folders to archives using FastZip by Richard Webb
- [#473] Add a Nuget badge to readme.md by Richard Webb
- ✅ [#469] Add test for writing using a zero byte buffer by Richard Webb
- 📚 [#389] Simplify Documentation generation by Robin Sue
- ✅ [#437] Add a ZipCrypto/7zip interop test to the ZipEncryptionHandling tests by Richard Webb
- ⚡️ [#441] Update the benchmark project to BenchmarkDotNet 0.12.1 by Richard Webb
- ✅ [#444] Multi-target unit tests for .NET Core 2.0 and .NET FW 4.6 by Richard Webb
- ZipEntry name mismatch when attempting to delete a directory entry (#295)
- ⏪ Revert ArraySegment simplification to speed up CRC32 calculation (#301)
- 👍 Allow AES Zip to better handle reading partial stream data (#308)
- Always write Zip64 extra size fields when size is -1 (too big for non-Zip64) (#314)
- 👻 Throw exception when attempting to read a zero code length symbol (#316)
- This should fix most issues where reading Zip-files get stuck in an infinite loop
ZipOutputStream.CloseEntry()now works for Stored AES encrypted entries (#323)
- Empty string is now treated as no RootPath in TarArchive (#336)
- ZipAESStream now handle reads of less data than the AES block size (#331)
- Flushing a GZipOutputStream now attempts to deflate all input data before writing it to the underlying stream (#225)
- StrongEncryption flag is no longer (incorrectly) set for WinzipAES encrypted entries (#329)
- Attempting to read 0 bytes from a
GZipInputStreamno longer causes it to hang indefinitely (#372)
- 🐧 HostSystem can now be set for Zipfiles, allowing creation of files targeting Linux filesystems (#325)
- 👻 The SharpZip custom
Exceptiontypes now implements
- This allows them to be transmitted when using WCF
- AES256 decryption now works as intended.
- ✅ AES encryption should also be working but the code is not sufficiently tested and may be buggy.
- 📦 Sourcelink debugging is now enabled and the symbols are included in the nuget package.
- Overriding the codepage used for the file names and comments is now possible when extracting archives by setting
- 🐎 Calculating the Adler checksum is now skipped for Zip and Gzip since it's not actually used for the formats. This should greatly improve performance.
🚚 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.
- 0️⃣ 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.
- 0️⃣ 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.
- The targeted frameworks are now:
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