From 853ce8b93e833e1193f2fef40894844786f95e9b Mon Sep 17 00:00:00 2001 From: EliotJones Date: Sat, 13 Sep 2025 16:27:09 +0200 Subject: [PATCH] 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 --- .../Tokenization/Scanner/PdfTokenScanner.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/UglyToad.PdfPig/Tokenization/Scanner/PdfTokenScanner.cs b/src/UglyToad.PdfPig/Tokenization/Scanner/PdfTokenScanner.cs index 7d4226e6..c5fa7a6a 100644 --- a/src/UglyToad.PdfPig/Tokenization/Scanner/PdfTokenScanner.cs +++ b/src/UglyToad.PdfPig/Tokenization/Scanner/PdfTokenScanner.cs @@ -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 {