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.");
+    	}
     }
 }