Browse Source

Validate bundleHeaderOffset.

We encountered some assemblies with bundleHeaderOffset==0, but the beginning of the file had a regular DOS header, not a bundle header.
pull/2221/head
Daniel Grunwald 5 years ago
parent
commit
dee9113870
  1. 6
      ICSharpCode.Decompiler/SingleFileBundle.cs

6
ICSharpCode.Decompiler/SingleFileBundle.cs

@ -5,6 +5,7 @@ using System;
using System.Collections.Immutable; using System.Collections.Immutable;
using System.IO; using System.IO;
using System.IO.MemoryMappedFiles; using System.IO.MemoryMappedFiles;
using System.Runtime.CompilerServices;
using System.Text; using System.Text;
namespace ICSharpCode.Decompiler namespace ICSharpCode.Decompiler
@ -49,10 +50,13 @@ namespace ICSharpCode.Decompiler
{ {
if (*ptr == 0x8b && bundleSignature.SequenceEqual(new ReadOnlySpan<byte>(ptr, bundleSignature.Length))) if (*ptr == 0x8b && bundleSignature.SequenceEqual(new ReadOnlySpan<byte>(ptr, bundleSignature.Length)))
{ {
bundleHeaderOffset = *(long*)(ptr - sizeof(long)); bundleHeaderOffset = Unsafe.ReadUnaligned<long>(ptr - sizeof(long));
if (bundleHeaderOffset > 0 && bundleHeaderOffset < size)
{
return true; return true;
} }
} }
}
bundleHeaderOffset = 0; bundleHeaderOffset = 0;
return false; return false;

Loading…
Cancel
Save