support missing object numbers when brute-forcing

the file 10404 (ironically) contains not found references with number 43 0
for its info dictionary. changes brute-force code so that objects can be
entirely missing
This commit is contained in:
EliotJones
2025-09-13 16:27:09 +02:00
parent c57cd5008b
commit 853ce8b93e

View File

@@ -770,7 +770,8 @@
if (!MoveNext())
{
return BruteForceFileToFindReference(reference);
TryBruteForceFileToFindReference(reference, out var bfObjectToken);
return bfObjectToken;
}
var found = (ObjectToken)CurrentToken!;
@@ -780,7 +781,9 @@
return found;
}
return BruteForceFileToFindReference(reference);
TryBruteForceFileToFindReference(reference, out var bfToken);
return bfToken;
}
public void ReplaceToken(IndirectReference reference, IToken token)
@@ -790,8 +793,9 @@
overwrittenTokens[reference] = new ObjectToken(0, reference, token);
}
private ObjectToken BruteForceFileToFindReference(IndirectReference reference)
private bool TryBruteForceFileToFindReference(IndirectReference reference, [NotNullWhen(true)] out ObjectToken? result)
{
result = null;
try
{
// Brute force read the entire file
@@ -806,10 +810,12 @@
if (!objectLocationProvider.TryGetCached(reference, out var objectToken))
{
throw new PdfDocumentFormatException($"Could not locate object with reference: {reference} despite a full document search.");
return false;
}
return objectToken;
result = objectToken;
return true;
}
finally
{