diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml
index b6b0eeb2a..d5630331f 100644
--- a/.github/workflows/build-test.yml
+++ b/.github/workflows/build-test.yml
@@ -14,14 +14,14 @@ on:
jobs:
Build:
- runs-on: ${{ matrix.os }}-latest
+ runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
- os: [ubuntu, windows, macos]
+ os: [ubuntu-latest, windows-2019, macos-latest]
target: [netstandard2.0, netstandard2.1]
include:
- - os: windows
+ - os: windows-2019
target: net45
env:
LIB_PROJ: src/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.csproj
@@ -35,6 +35,9 @@ jobs:
uses: actions/setup-dotnet@v1
with:
dotnet-version: '3.1.x'
+
+ - name: Show .NET info
+ run: dotnet --info
- name: Build library (Debug)
run: dotnet build -c debug -f ${{ matrix.target }} ${{ env.LIB_PROJ }}
@@ -73,7 +76,7 @@ jobs:
CodeCov:
name: Code Coverage
- runs-on: windows-latest
+ runs-on: windows-2019
env:
DOTCOVER_VER: 2021.1.2
DOTCOVER_PKG: jetbrains.dotcover.commandlinetools
@@ -117,7 +120,7 @@ jobs:
Pack:
needs: [Build, Test, CodeCov]
- runs-on: windows-latest
+ runs-on: windows-2019
env:
PKG_SUFFIX: ''
PKG_PROJ: src/ICSharpCode.SharpZipLib/ICSharpCode.SharpZipLib.csproj
diff --git a/README.md b/README.md
index a27570f45..5f09f1f01 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# SharpZipLib [![Build Status](https://github.com/icsharpcode/SharpZipLib/actions/workflows/build-test.yml/badge.svg?branch=master)](https://github.com/icsharpcode/SharpZipLib/actions/workflows/build-test.yml) [![NuGet Version](https://img.shields.io/nuget/v/SharpZipLib.svg)](https://www.nuget.org/packages/SharpZipLib/)
+# SharpZipLib [![Build Status](https://github.com/icsharpcode/SharpZipLib/actions/workflows/build-test.yml/badge.svg?branch=master)](https://github.com/icsharpcode/SharpZipLib/actions/workflows/build-test.yml) [![NuGet Version](https://img.shields.io/nuget/v/SharpZipLib.svg)](https://www.nuget.org/packages/SharpZipLib/) [![openupm](https://img.shields.io/npm/v/org.icsharpcode.sharpziplib?label=openupm®istry_uri=https://package.openupm.com)](https://openupm.com/packages/org.icsharpcode.sharpziplib/)
Introduction
------------
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Cmd_BZip2.csproj b/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Cmd_BZip2.csproj
index 07039ab9d..b1536ff0f 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Cmd_BZip2.csproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Cmd_BZip2.csproj
@@ -101,7 +101,7 @@ copy Cmd_BZip2.exe bunzip2.exe
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Cmd_Checksum.csproj b/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Cmd_Checksum.csproj
index 1509d6080..d5d9f6cfe 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Cmd_Checksum.csproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Cmd_Checksum.csproj
@@ -100,7 +100,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Cmd_GZip.csproj b/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Cmd_GZip.csproj
index d5e021825..9ebaa8ca6 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Cmd_GZip.csproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Cmd_GZip.csproj
@@ -100,7 +100,7 @@ copy Cmd_GZip.exe gunzip.exe
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Cmd_Tar.csproj b/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Cmd_Tar.csproj
index 4f6bb416a..d40eef52e 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Cmd_Tar.csproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Cmd_Tar.csproj
@@ -91,7 +91,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Cmd_ZipInfo.csproj b/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Cmd_ZipInfo.csproj
index 0e3d31240..311fcb85d 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Cmd_ZipInfo.csproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Cmd_ZipInfo.csproj
@@ -99,7 +99,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/CreateZipFile.csproj b/samples/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/CreateZipFile.csproj
index 61dcf0166..efd2cd464 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/CreateZipFile.csproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/CreateZipFile.csproj
@@ -107,7 +107,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/cs/FastZip/FastZip.csproj b/samples/ICSharpCode.SharpZipLib.Samples/cs/FastZip/FastZip.csproj
index 6a948c6b5..efacf9ff8 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/cs/FastZip/FastZip.csproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/cs/FastZip/FastZip.csproj
@@ -90,7 +90,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/cs/sz/sz.csproj b/samples/ICSharpCode.SharpZipLib.Samples/cs/sz/sz.csproj
index 02a096db6..121d55859 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/cs/sz/sz.csproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/cs/sz/sz.csproj
@@ -85,7 +85,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/unzipfile.csproj b/samples/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/unzipfile.csproj
index fa3f6b8fc..43403d1e4 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/unzipfile.csproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/unzipfile.csproj
@@ -61,7 +61,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/viewzipfile.csproj b/samples/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/viewzipfile.csproj
index 0b10efd15..4734de832 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/viewzipfile.csproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/viewzipfile.csproj
@@ -61,7 +61,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/cs/zf/zf.csproj b/samples/ICSharpCode.SharpZipLib.Samples/cs/zf/zf.csproj
index e8d8b757f..1dbf75744 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/cs/zf/zf.csproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/cs/zf/zf.csproj
@@ -85,7 +85,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFile.vbproj b/samples/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFile.vbproj
index 2057acd9f..42db45963 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFile.vbproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFile.vbproj
@@ -95,7 +95,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFile.vbproj b/samples/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFile.vbproj
index e6ccebddc..d86ec9e00 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFile.vbproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFile.vbproj
@@ -171,7 +171,7 @@
- 1.3.1
+ 1.3.3
1.0.2
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/vb/minibzip2/minibzip2.vbproj b/samples/ICSharpCode.SharpZipLib.Samples/vb/minibzip2/minibzip2.vbproj
index 618adb8ad..e15a05ec6 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/vb/minibzip2/minibzip2.vbproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/vb/minibzip2/minibzip2.vbproj
@@ -112,7 +112,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/vb/viewzipfile/viewzipfile.vbproj b/samples/ICSharpCode.SharpZipLib.Samples/vb/viewzipfile/viewzipfile.vbproj
index 429d77bfc..c85b1082e 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/vb/viewzipfile/viewzipfile.vbproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/vb/viewzipfile/viewzipfile.vbproj
@@ -90,7 +90,7 @@
- 1.3.1
+ 1.3.3
diff --git a/samples/ICSharpCode.SharpZipLib.Samples/vb/zipfiletest/zipfiletest.vbproj b/samples/ICSharpCode.SharpZipLib.Samples/vb/zipfiletest/zipfiletest.vbproj
index ddde8318d..b8b02293e 100644
--- a/samples/ICSharpCode.SharpZipLib.Samples/vb/zipfiletest/zipfiletest.vbproj
+++ b/samples/ICSharpCode.SharpZipLib.Samples/vb/zipfiletest/zipfiletest.vbproj
@@ -100,7 +100,7 @@
- 1.3.1
+ 1.3.3
diff --git a/src/ICSharpCode.SharpZipLib/Zip/ZipConstants.cs b/src/ICSharpCode.SharpZipLib/Zip/ZipConstants.cs
index def8cf592..b16fdefdf 100644
--- a/src/ICSharpCode.SharpZipLib/Zip/ZipConstants.cs
+++ b/src/ICSharpCode.SharpZipLib/Zip/ZipConstants.cs
@@ -487,4 +487,28 @@ public static class ZipConstants
#endregion Header Signatures
}
+
+ ///
+ /// GeneralBitFlags helper extensions
+ ///
+ public static class GenericBitFlagsExtensions
+ {
+ ///
+ /// Efficiently check if any of the flags are set without enum un-/boxing
+ ///
+ ///
+ ///
+ /// Returns whether any of flags are set
+ public static bool HasAny(this GeneralBitFlags target, GeneralBitFlags flags)
+ => ((int)target & (int)flags) != 0;
+
+ ///
+ /// Efficiently check if all the flags are set without enum un-/boxing
+ ///
+ ///
+ ///
+ /// Returns whether the flags are all set
+ public static bool HasAll(this GeneralBitFlags target, GeneralBitFlags flags)
+ => ((int)target & (int)flags) == (int)flags;
+ }
}
diff --git a/src/ICSharpCode.SharpZipLib/Zip/ZipFile.cs b/src/ICSharpCode.SharpZipLib/Zip/ZipFile.cs
index 966fefff7..a5e7bfad4 100644
--- a/src/ICSharpCode.SharpZipLib/Zip/ZipFile.cs
+++ b/src/ICSharpCode.SharpZipLib/Zip/ZipFile.cs
@@ -1142,15 +1142,15 @@ private long TestLocalHeader(ZipEntry entry, HeaderTest tests)
size = localExtraData.ReadLong();
compressedSize = localExtraData.ReadLong();
- if (localFlags.Includes(GeneralBitFlags.Descriptor))
+ if (localFlags.HasAny(GeneralBitFlags.Descriptor))
{
// These may be valid if patched later
- if ((size != -1) && (size != entry.Size))
+ if ((size > 0) && (size != entry.Size))
{
throw new ZipException("Size invalid for descriptor");
}
- if ((compressedSize != -1) && (compressedSize != entry.CompressedSize))
+ if ((compressedSize > 0) && (compressedSize != entry.CompressedSize))
{
throw new ZipException("Compressed size invalid for descriptor");
}
@@ -1181,9 +1181,7 @@ private long TestLocalHeader(ZipEntry entry, HeaderTest tests)
throw new ZipException($"Version required to extract this entry not supported ({extractVersion})");
}
- const GeneralBitFlags notSupportedFlags = GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption |
- GeneralBitFlags.EnhancedCompress | GeneralBitFlags.HeaderMasked;
- if (localFlags.Includes(notSupportedFlags))
+ if (localFlags.HasAny(GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption | GeneralBitFlags.EnhancedCompress | GeneralBitFlags.HeaderMasked))
{
throw new ZipException($"The library does not support the zip features required to extract this entry ({localFlags & notSupportedFlags:F})");
}
@@ -1215,21 +1213,21 @@ private long TestLocalHeader(ZipEntry entry, HeaderTest tests)
var localEncoding = _stringCodec.ZipInputEncoding(localFlags);
// Local entry flags dont have reserved bit set on.
- if (localFlags.Includes(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | GeneralBitFlags.ReservedPkware15))
+ if (localFlags.HasAny(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | GeneralBitFlags.ReservedPkware15))
{
throw new ZipException("Reserved bit flags cannot be set.");
}
// Encryption requires extract version >= 20
- if (localFlags.Includes(GeneralBitFlags.Encrypted) && extractVersion < 20)
+ if (localFlags.HasAny(GeneralBitFlags.Encrypted) && extractVersion < 20)
{
throw new ZipException($"Version required to extract this entry is too low for encryption ({extractVersion})");
}
// Strong encryption requires encryption flag to be set and extract version >= 50.
- if (localFlags.Includes(GeneralBitFlags.StrongEncryption))
+ if (localFlags.HasAny(GeneralBitFlags.StrongEncryption))
{
- if (!localFlags.Includes(GeneralBitFlags.Encrypted))
+ if (!localFlags.HasAny(GeneralBitFlags.Encrypted))
{
throw new ZipException("Strong encryption flag set but encryption flag is not set");
}
@@ -1241,13 +1239,13 @@ private long TestLocalHeader(ZipEntry entry, HeaderTest tests)
}
// Patched entries require extract version >= 27
- if (localFlags.Includes(GeneralBitFlags.Patched) && extractVersion < 27)
+ if (localFlags.HasAny(GeneralBitFlags.Patched) && extractVersion < 27)
{
throw new ZipException($"Patched data requires higher version than ({extractVersion})");
}
// Central header flags match local entry flags.
- if (!localFlags.Equals((GeneralBitFlags)entry.Flags))
+ if ((int)localFlags != entry.Flags)
{
throw new ZipException($"Central header/local header flags mismatch ({(GeneralBitFlags)entry.Flags:F} vs {localFlags:F})");
}
@@ -1264,7 +1262,7 @@ private long TestLocalHeader(ZipEntry entry, HeaderTest tests)
}
// Strong encryption and extract version match
- if (localFlags.Includes(GeneralBitFlags.StrongEncryption))
+ if (localFlags.HasAny(GeneralBitFlags.StrongEncryption))
{
if (extractVersion < 62)
{
@@ -1272,7 +1270,7 @@ private long TestLocalHeader(ZipEntry entry, HeaderTest tests)
}
}
- if (localFlags.Includes(GeneralBitFlags.HeaderMasked))
+ if (localFlags.HasAny(GeneralBitFlags.HeaderMasked))
{
if (fileTime != 0 || fileDate != 0)
{
@@ -1280,7 +1278,7 @@ private long TestLocalHeader(ZipEntry entry, HeaderTest tests)
}
}
- if (!localFlags.Includes(GeneralBitFlags.Descriptor))
+ if (!localFlags.HasAny(GeneralBitFlags.Descriptor))
{
if (crcValue != (uint)entry.Crc)
{
@@ -1350,7 +1348,7 @@ private long TestLocalHeader(ZipEntry entry, HeaderTest tests)
// Size can be verified only if it is known in the local header.
// it will always be known in the central header.
- if (!localFlags.Includes(GeneralBitFlags.Descriptor) ||
+ if (!localFlags.HasAny(GeneralBitFlags.Descriptor) ||
((size > 0 || compressedSize > 0) && entry.Size > 0))
{
if (size != 0 && size != entry.Size)
@@ -2504,7 +2502,7 @@ private void CopyDescriptorBytes(ZipUpdate update, Stream dest, Stream source)
/// The descriptor size, zero if there isn't one.
private static int GetDescriptorSize(ZipUpdate update, bool includingSignature)
{
- if (!((GeneralBitFlags)update.Entry.Flags).HasFlag(GeneralBitFlags.Descriptor))
+ if (!((GeneralBitFlags)update.Entry.Flags).HasAny(GeneralBitFlags.Descriptor))
return 0;
var descriptorWithSignature = update.Entry.LocalHeaderRequiresZip64