SharpZipLib icon indicating copy to clipboard operation
SharpZipLib copied to clipboard

Exception when reading an encrypted zip file containing a folder: "Stored, but compressed != uncompressed"

Open bhaeussermann opened this issue 1 year ago • 1 comments

Describe the bug

When I use a ZipInputStream to read a zip file that is encrypted and contains folder entries, the following exception occurs:

ICSharpCode.SharpZipLib.Zip.ZipException: 'Stored, but compressed != uncompressed'

Here is the zip file that is causing the exception. It was created using SharpZipLib and can be opened fine using other zip applications or libraries: archive.zip

In the code below, it fails when calling GetNextEntry():

using var archive = new ZipInputStream(File.OpenRead(archiveFilePath))
{
    Password = "123456"
};
ZipEntry entry;
while ((entry = archive.GetNextEntry()) != null)
{
    Console.WriteLine(entry.Name);
}

Reproduction Code

https://dotnetfiddle.net/fXUXgR

Steps to reproduce

  1. Download the attached zip file and edit the provided code to point to that file.
  2. Run the code.

Expected behavior

The program must list the entries in the zip file without throwing an exception.

Operating System

Windows

Framework Version

.NET 7

Tags

ZIP

Additional context

No response

bhaeussermann avatar Dec 13 '24 04:12 bhaeussermann

I have created a PR to fix this error. I believe the source of this error is due to ZipFile changing the compression method from Deflate to Stored for directories even if they are encrypted. When reading using ZipInputStream, it checks for an encryption header if it is encrypted and if it is Stored.

When creating a directory with ZipOutputStream, the directory is NOT set to Stored despite being empty

bwinsley avatar Nov 14 '25 05:11 bwinsley