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. 8
      ICSharpCode.Decompiler/SingleFileBundle.cs

8
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,8 +50,11 @@ 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));
return true; if (bundleHeaderOffset > 0 && bundleHeaderOffset < size)
{
return true;
}
} }
} }

Loading…
Cancel
Save