Merge pull request #246 from InusualZ/merger-stackoverflow

Fix #199
This commit is contained in:
Eliot Jones
2020-12-23 10:54:01 -04:00
committed by GitHub
2 changed files with 10 additions and 34 deletions

View File

@@ -89,7 +89,7 @@
using (var document = PdfDocument.Open(result, ParsingOptions.LenientParsingOff))
{
Assert.Equal(2, document.NumberOfPages);
Assert.True(document.Structure.CrossReferenceTable.ObjectOffsets.Count < 24,
Assert.True(document.Structure.CrossReferenceTable.ObjectOffsets.Count <= 24,
"Expected object count to be lower than 24");
}
}

View File

@@ -77,28 +77,19 @@
public IndirectReferenceToken WriteToken(IToken token, int? reservedNumber = null)
{
// if you can't consider deduplicating the token.
// It must be because it's referenced by his child element, so you must have reserved a number before hand
// Example /Pages Obj
var canBeDuplicated = !reservedNumber.HasValue;
if (!canBeDuplicated)
{
if (!reservedNumbers.Remove(reservedNumber.Value))
{
throw new InvalidOperationException("You can't reuse a reserved number");
}
// When we end up writing this token, all of his child would already have been added and checked for duplicate
return AddToken(token, reservedNumber.Value);
}
var reference = FindToken(token);
if (reference == null)
if (!reservedNumber.HasValue)
{
return AddToken(token, CurrentNumber++);
}
return reference;
if (!reservedNumbers.Remove(reservedNumber.Value))
{
throw new InvalidOperationException("You can't reuse a reserved number");
}
// When we end up writing this token, all of his child would already have been added and checked for duplicate
return AddToken(token, reservedNumber.Value);
}
public int ReserveNumber()
@@ -151,21 +142,6 @@
return referenceToken;
}
private IndirectReferenceToken FindToken(IToken token)
{
foreach (var pair in tokenReferences)
{
var reference = pair.Key;
var storedToken = pair.Value;
if (storedToken.Equals(token))
{
return reference;
}
}
return null;
}
private static void WriteString(string text, Stream stream)
{
var bytes = OtherEncodings.StringAsLatin1Bytes(text);