如何在开箱前查看未压缩的大小



我正在使用DotNetZip提取来自外部(不可信)来源的zip文件。我的问题是zip文件本身可以是几千字节,但解压缩的内容可能会变成PB级。开箱前如何查看未压缩的尺寸?有没有可靠的方法来查看这一点并防止内存不足异常?

如下所述,可以使用离子zip完成:

using (ZipFile zip = ZipFile.Read(zipFile))
                {
                 // Option 2 - will need to sift through the mass of info
                 info = zip.Info;
foreach (ZipEntry e in zip)
                    {
                        long uncompressedsize = e.UncompressedSize;
                        // Option 1
                        totaluncompressedsize += uncompressedsize;
                    }
                 }

但问题仍然存在:UncompressedSize完全可靠吗?有人可以更改此信息以使其显示为较小的未压缩大小吗?

不,它并不完全可靠。 zip文件中的未压缩大小肯定可以被恶意来源更改。 您应该使用未压缩的大小来限制使用的内存,如果解压缩超过该大小,只需停止并拒绝 zip 文件即可。 切勿依赖输入来避免异常。

可以解码压缩条目并确定其未压缩的大小,而无需实际生成未压缩的输出。 但是,如果您无论如何都要解压,那就没有多大意义了。 解码几乎与解压缩一样长。 只需开始解压缩并在达到声称的未压缩大小时停止。

如何找到离子zip文件的未压缩大小 是一个类似的问题,可能会对您有所帮助。基本上,您遍历每个条目并将未压缩的大小相加。

最新更新