check for offsets exceeding file length for xref parsing #293

This commit is contained in:
Eliot Jones
2021-02-21 12:04:17 -04:00
parent 30dbc4cd41
commit becc772242
2 changed files with 16 additions and 3 deletions

View File

@@ -24,6 +24,8 @@
return true; return true;
} }
var builderOffsets = new Dictionary<IndirectReference, long>();
var bruteForceOffsets = BruteForceSearcher.GetObjectLocations(bytes); var bruteForceOffsets = BruteForceSearcher.GetObjectLocations(bytes);
if (bruteForceOffsets.Count > 0) if (bruteForceOffsets.Count > 0)
{ {
@@ -77,10 +79,11 @@
foreach (var item in bruteForceOffsets) foreach (var item in bruteForceOffsets)
{ {
//xrefOffset[item.Key] = item.Value; builderOffsets[item.Key] = item.Value;
} }
} }
actualOffsets = builderOffsets;
} }
return false; return false;
@@ -131,6 +134,12 @@
try try
{ {
if (offset >= bytes.Length)
{
bytes.Seek(originOffset);
return false;
}
bytes.Seek(offset); bytes.Seek(offset);
if (ReadHelper.IsWhitespace(bytes.CurrentByte)) if (ReadHelper.IsWhitespace(bytes.CurrentByte))

View File

@@ -4,7 +4,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using Core; using Core;
using Logging; using Logging;
using Parts;
using Tokenization.Scanner; using Tokenization.Scanner;
using Tokens; using Tokens;
@@ -30,6 +29,11 @@
return startXRefOffset; return startXRefOffset;
} }
if (startXRefOffset >= inputBytes.Length)
{
return CalculateXRefFixedOffset(startXRefOffset, scanner, inputBytes);
}
scanner.Seek(startXRefOffset); scanner.Seek(startXRefOffset);
scanner.MoveNext(); scanner.MoveNext();