diff --git a/ICSharpCode.Decompiler.Tests/SingleFileBundleTests.cs b/ICSharpCode.Decompiler.Tests/SingleFileBundleTests.cs index 2bc48ee8f..c74451b52 100644 --- a/ICSharpCode.Decompiler.Tests/SingleFileBundleTests.cs +++ b/ICSharpCode.Decompiler.Tests/SingleFileBundleTests.cs @@ -26,13 +26,7 @@ namespace ICSharpCode.Decompiler.Tests [TestFixture] public class SingleFileBundleTests { - // The 32-byte bundle signature (SHA-256 of ".net core bundle"), as in SingleFileBundle.IsBundle. - static readonly byte[] Signature = new byte[] { - 0x8b, 0x12, 0x02, 0xb9, 0x6a, 0x61, 0x20, 0x38, - 0x72, 0x7b, 0x93, 0x02, 0x14, 0xd7, 0xa0, 0x32, - 0x13, 0xf5, 0xb9, 0xe6, 0xef, 0xae, 0x33, 0x18, - 0xee, 0x3b, 0x2d, 0xce, 0x24, 0xb3, 0x6a, 0xae - }; + static readonly byte[] Signature = SingleFileBundle.BundleSignature.ToArray(); [Test] public unsafe void IsBundle_SignatureAtStart_DoesNotReadBeforeBuffer() diff --git a/ICSharpCode.Decompiler/Properties/AssemblyInfo.cs b/ICSharpCode.Decompiler/Properties/AssemblyInfo.cs index 6a8f0e31c..753d60580 100644 --- a/ICSharpCode.Decompiler/Properties/AssemblyInfo.cs +++ b/ICSharpCode.Decompiler/Properties/AssemblyInfo.cs @@ -36,6 +36,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyInformationalVersion(DecompilerVersionInfo.FullVersionWithCommitHash)] [assembly: InternalsVisibleTo("ICSharpCode.Decompiler.Tests, PublicKey=00240000048000009400000006020000002400005253413100040000010001004dcf3979c4e902efa4dd2163a039701ed5822e6f1134d77737296abbb97bf0803083cfb2117b4f5446a217782f5c7c634f9fe1fc60b4c11d62c5b3d33545036706296d31903ddcf750875db38a8ac379512f51620bb948c94d0831125fbc5fe63707cbb93f48c1459c4d1749eb7ac5e681a2f0d6d7c60fa527a3c0b8f92b02bf")] +[assembly: InternalsVisibleTo("ILSpy.Tests, PublicKey=00240000048000009400000006020000002400005253413100040000010001004dcf3979c4e902efa4dd2163a039701ed5822e6f1134d77737296abbb97bf0803083cfb2117b4f5446a217782f5c7c634f9fe1fc60b4c11d62c5b3d33545036706296d31903ddcf750875db38a8ac379512f51620bb948c94d0831125fbc5fe63707cbb93f48c1459c4d1749eb7ac5e681a2f0d6d7c60fa527a3c0b8f92b02bf")] [assembly: SuppressMessage("Microsoft.Usage", "CA2243:AttributeStringLiteralsShouldParseCorrectly", Justification = "AssemblyInformationalVersion does not need to be a parsable version")] diff --git a/ICSharpCode.Decompiler/SingleFileBundle.cs b/ICSharpCode.Decompiler/SingleFileBundle.cs index 2e82f78df..0d3817740 100644 --- a/ICSharpCode.Decompiler/SingleFileBundle.cs +++ b/ICSharpCode.Decompiler/SingleFileBundle.cs @@ -35,15 +35,19 @@ namespace ICSharpCode.Decompiler } } + /// + /// The 32-byte bundle signature: SHA-256 of ".net core bundle". + /// + internal static ReadOnlySpan BundleSignature => new byte[] { + 0x8b, 0x12, 0x02, 0xb9, 0x6a, 0x61, 0x20, 0x38, + 0x72, 0x7b, 0x93, 0x02, 0x14, 0xd7, 0xa0, 0x32, + 0x13, 0xf5, 0xb9, 0xe6, 0xef, 0xae, 0x33, 0x18, + 0xee, 0x3b, 0x2d, 0xce, 0x24, 0xb3, 0x6a, 0xae + }; + public static unsafe bool IsBundle(byte* data, long size, out long bundleHeaderOffset) { - ReadOnlySpan bundleSignature = new byte[] { - // 32 bytes represent the bundle signature: SHA-256 for ".net core bundle" - 0x8b, 0x12, 0x02, 0xb9, 0x6a, 0x61, 0x20, 0x38, - 0x72, 0x7b, 0x93, 0x02, 0x14, 0xd7, 0xa0, 0x32, - 0x13, 0xf5, 0xb9, 0xe6, 0xef, 0xae, 0x33, 0x18, - 0xee, 0x3b, 0x2d, 0xce, 0x24, 0xb3, 0x6a, 0xae - }; + ReadOnlySpan bundleSignature = BundleSignature; // 'end' is the last position at which a full signature still fits, so it is a valid // candidate itself: a memory-mapped view reports the exact file length on Unix (Windows diff --git a/ILSpy.Tests/LoadedPackageBundleTests.cs b/ILSpy.Tests/LoadedPackageBundleTests.cs index 3301f1037..07abc769a 100644 --- a/ILSpy.Tests/LoadedPackageBundleTests.cs +++ b/ILSpy.Tests/LoadedPackageBundleTests.cs @@ -23,6 +23,7 @@ using System.IO.Compression; using System.Linq; using System.Text; +using ICSharpCode.Decompiler; using ICSharpCode.ILSpyX; using NUnit.Framework; @@ -38,13 +39,7 @@ namespace ICSharpCode.ILSpy.Tests; [TestFixture] public class LoadedPackageBundleTests { - // The 32-byte bundle signature (SHA-256 of ".net core bundle"), as in SingleFileBundle.IsBundle. - static readonly byte[] Signature = new byte[] { - 0x8b, 0x12, 0x02, 0xb9, 0x6a, 0x61, 0x20, 0x38, - 0x72, 0x7b, 0x93, 0x02, 0x14, 0xd7, 0xa0, 0x32, - 0x13, 0xf5, 0xb9, 0xe6, 0xef, 0xae, 0x33, 0x18, - 0xee, 0x3b, 0x2d, 0xce, 0x24, 0xb3, 0x6a, 0xae - }; + static readonly byte[] Signature = SingleFileBundle.BundleSignature.ToArray(); readonly List tempFiles = new();