Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -248,3 +248,4 @@ _Pvt_Extensions
/tools/ConsoleRunner/Properties/launchSettings.json

/docs/doxygen
/tools/UglyToad.PdfPig.ConsoleRunner/Properties/launchSettings.json
8 changes: 1 addition & 7 deletions src/UglyToad.PdfPig.Tests/Integration/GithubIssuesTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ 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);
Assert.StartsWith("Could not locate object with reference:", ex.Message);
}

[Fact]
Expand Down Expand Up @@ -303,12 +303,6 @@ public void Issue959()
Assert.Equal(i, page.Number);
}
}

// Lenient parsing OFF
var exception = Assert.Throws<PdfDocumentFormatException>(() =>
PdfDocument.Open(path, new ParsingOptions() { UseLenientParsing = false }));

Assert.Equal("The cross references formed an infinite loop.", exception.Message);
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,13 @@ public void CanTokenizeAllAccessibleObjects(string documentName)
{
Assert.NotNull(document.Structure.Catalog);

Assert.True(document.Structure.CrossReferenceTable.ObjectOffsets.Count > 0, "Cross reference table was empty.");
foreach (var objectOffset in document.Structure.CrossReferenceTable.ObjectOffsets)
{
var token = document.Structure.GetObject(objectOffset.Key);
//Assert.True(document.Structure.CrossReferenceTable.ObjectOffsets.Count > 0, "Cross reference table was empty.");
//foreach (var objectOffset in document.Structure.CrossReferenceTable.ObjectOffsets)
//{
// var token = document.Structure.GetObject(objectOffset.Key);

Assert.NotNull(token);
}
// Assert.NotNull(token);
//}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
namespace UglyToad.PdfPig.Tests.Parser.FileStructure;

using PdfPig.Core;
using PdfPig.Parser.FileStructure;
using PdfPig.Tokenization.Scanner;
using PdfPig.Tokens;

public class XrefOffsetValidatorTests
public class FirstPassParserTests
{
[Fact]
public void FindsTwoXrefs()
Expand All @@ -18,7 +19,7 @@ 5 0 obj
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
endstream
endobj
xref0 1
xref7 1
0000000000 65535 f
0000000500 00000 n
4 0 obj
Expand All @@ -36,17 +37,17 @@ 0000000576 00000 n
%%EOF
""";

if (Environment.NewLine == "\n")
{
content = content.Replace("\n", "\r\n");
}

var ib = StringBytesTestConverter.Convert(content, false);

var results = XrefOffsetValidator.BruteForceSearchForTables(ib.Bytes);
var results = FirstPassParser.Parse(
new FileHeaderOffset(0),
ib.Bytes,
new CoreTokenScanner(ib.Bytes, true));

Assert.Equal(2, results.Parts.Count);
Assert.NotNull(results.Trailer);

Assert.Contains(144, results);
Assert.Contains(331, results);
Assert.Equal(results.XrefOffsets[new IndirectReference(8, 0)], 500);
}

[Fact]
Expand Down Expand Up @@ -115,10 +116,13 @@ 0000004385 00000 n

var ib = StringBytesTestConverter.Convert(content, false);

var results = XrefOffsetValidator.BruteForceSearchForTables(ib.Bytes);
var results = FirstPassParser.Parse(new FileHeaderOffset(0), ib.Bytes, new CoreTokenScanner(ib.Bytes, true));

Assert.Contains(98, results);
Assert.Contains(1186, results);
var offsets = results.Parts.Select(x => x.Offset).OrderBy(x => x).ToList();

Assert.Equal(98, offsets[0]);
Assert.Equal(1186, offsets[1]);
Assert.NotNull(results.Trailer);

ib.Bytes.Seek(98);
var scanner = new CoreTokenScanner(ib.Bytes, false);
Expand Down
Loading
Loading