You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2014/01/11 14:42:12 UTC
svn commit: r1557389 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/GRestore.java
Author: lehmi
Date: Sat Jan 11 13:42:12 2014
New Revision: 1557389
URL: http://svn.apache.org/r1557389
Log:
PDFBOX-161: avoid EmptyStackException if the number of q/Q-operators isn't well balanced
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/GRestore.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/GRestore.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/GRestore.java?rev=1557389&r1=1557388&r2=1557389&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/GRestore.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/GRestore.java Sat Jan 11 13:42:12 2014
@@ -18,24 +18,40 @@ package org.apache.pdfbox.util.operator;
import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.pdmodel.graphics.PDGraphicsState;
import org.apache.pdfbox.util.PDFOperator;
/**
- *
+ * Process the Q operator.
+ *
* @author Huault : huault@free.fr
- * @version $Revision: 1.4 $
+ *
*/
public class GRestore extends OperatorProcessor
{
+
/**
- * process : Q : Restore graphics state.
- * @param operator The operator that is being executed.
- * @param arguments List
+ * Log instance.
+ */
+ private static final Log LOG = LogFactory.getLog(GRestore.class);
+
+ /**
+ * {@inheritDoc}
*/
public void process(PDFOperator operator, List<COSBase> arguments)
{
- context.setGraphicsState( (PDGraphicsState)context.getGraphicsStack().pop() );
+ if (context.getGraphicsStack().size() > 0)
+ {
+ context.setGraphicsState( (PDGraphicsState)context.getGraphicsStack().pop() );
+ }
+ else
+ {
+ // this shouldn't happen but it does, see PDFBOX-161
+ // TODO make this self healing mechanism optional for preflight??
+ LOG.debug("GRestore: no graphics state left to be restored.");
+ }
}
}