Only reset missed attempts count if table is found in CrossReferenceParser.Parse() and fix #1047

This commit is contained in:
BobLd
2025-05-27 19:44:31 +01:00
parent ca9f70ffb0
commit 5b566b53da
3 changed files with 12 additions and 3 deletions

View File

@@ -7,6 +7,15 @@
public class GithubIssuesTests public class GithubIssuesTests
{ {
[Fact]
public void Issue1047()
{
var path = IntegrationHelpers.GetSpecificTestDocumentPath("Hang.pdf");
var ex = Assert.Throws<PdfDocumentFormatException>(() => PdfDocument.Open(path, new ParsingOptions() { UseLenientParsing = true }));
Assert.Equal("The cross reference was not found.", ex.Message);
}
[Fact] [Fact]
public void Issue1048() public void Issue1048()
{ {

View File

@@ -10,7 +10,7 @@
using Tokenization.Scanner; using Tokenization.Scanner;
using Tokens; using Tokens;
internal class CrossReferenceParser internal sealed class CrossReferenceParser
{ {
private readonly ILog log; private readonly ILog log;
private readonly XrefOffsetValidator offsetValidator; private readonly XrefOffsetValidator offsetValidator;
@@ -151,8 +151,6 @@
{ {
log.Debug("Element was cross reference stream."); log.Debug("Element was cross reference stream.");
missedAttempts = 0;
// Unread the numeric token. // Unread the numeric token.
tokenScanner.Seek(previousCrossReferenceLocation); tokenScanner.Seek(previousCrossReferenceLocation);
@@ -169,6 +167,8 @@
continue; continue;
} }
missedAttempts = 0;
table.Add(tablePart); table.Add(tablePart);
previousCrossReferenceLocation = tablePart.Previous; previousCrossReferenceLocation = tablePart.Previous;