mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-04-05 20:55:01 +08:00
Do not throw error on Pop when stack size is 1 in lenient mode and fix #973
This commit is contained in:
parent
92d3439465
commit
c4576e4ffa
@ -14,7 +14,7 @@
|
||||
Assert.Equal("Q", Pop.Value.Operator);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Fact(Skip = "The stack size check has been moved out of the Pop Operation, and is now in BaseStreamProcessor.PopState().")]
|
||||
public void CannotPopWithSingleFrame()
|
||||
{
|
||||
Action action = () => Pop.Value.Run(context);
|
||||
|
@ -7,11 +7,35 @@
|
||||
|
||||
public class GithubIssuesTests
|
||||
{
|
||||
[Fact]
|
||||
public void Issue973()
|
||||
{
|
||||
var path = IntegrationHelpers.GetSpecificTestDocumentPath("JD5008.pdf");
|
||||
|
||||
// Lenient parsing ON
|
||||
using (var document = PdfDocument.Open(path, new ParsingOptions() { UseLenientParsing = true }))
|
||||
{
|
||||
var page = document.GetPage(2);
|
||||
Assert.NotNull(page);
|
||||
Assert.Equal(2, page.Number);
|
||||
Assert.NotEmpty(page.Letters);
|
||||
}
|
||||
|
||||
// Lenient parsing OFF
|
||||
using (var document = PdfDocument.Open(path, new ParsingOptions() { UseLenientParsing = false }))
|
||||
{
|
||||
var exception = Assert.Throws<InvalidOperationException>(() => document.GetPage(2));
|
||||
Assert.Equal("Cannot execute a pop of the graphics state stack, it would leave the stack empty.", exception.Message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void Issue959()
|
||||
{
|
||||
// Lenient parsing ON
|
||||
var path = IntegrationHelpers.GetSpecificTestDocumentPath("algo.pdf");
|
||||
|
||||
// Lenient parsing ON
|
||||
using (var document = PdfDocument.Open(path, new ParsingOptions() { UseLenientParsing = true }))
|
||||
{
|
||||
for (int i = 1; i <= document.NumberOfPages; ++i)
|
||||
|
File diff suppressed because one or more lines are too long
@ -195,7 +195,21 @@
|
||||
/// <inheritdoc/>
|
||||
public virtual void PopState()
|
||||
{
|
||||
GraphicsStack.Pop();
|
||||
if (StackSize > 1)
|
||||
{
|
||||
GraphicsStack.Pop();
|
||||
}
|
||||
else
|
||||
{
|
||||
const string error = "Cannot execute a pop of the graphics state stack, it would leave the stack empty.";
|
||||
ParsingOptions.Logger.Error(error);
|
||||
|
||||
if (!ParsingOptions.UseLenientParsing)
|
||||
{
|
||||
throw new InvalidOperationException(error);
|
||||
}
|
||||
}
|
||||
|
||||
ActiveExtendedGraphicsStateFont = null;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
namespace UglyToad.PdfPig.Graphics.Operations.SpecialGraphicsState
|
||||
{
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
/// <inheritdoc />
|
||||
@ -29,15 +28,7 @@
|
||||
/// <inheritdoc />
|
||||
public void Run(IOperationContext operationContext)
|
||||
{
|
||||
var currentStackSize = operationContext.StackSize;
|
||||
if (currentStackSize > 1)
|
||||
{
|
||||
operationContext.PopState();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidOperationException("Cannot execute a pop of the graphics state stack, it would leave the stack empty.");
|
||||
}
|
||||
operationContext.PopState();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
Loading…
Reference in New Issue
Block a user