You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2014/11/27 08:01:46 UTC

svn commit: r1642033 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator: ./ color/

Author: tilman
Date: Thu Nov 27 07:01:46 2014
New Revision: 1642033

URL: http://svn.apache.org/r1642033
Log:
PDFBOX-2505: parameter validation for the device colorspace operators; code cleanup

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/Operator.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/OperatorProcessor.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetColor.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/Operator.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/Operator.java?rev=1642033&r1=1642032&r2=1642033&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/Operator.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/Operator.java Thu Nov 27 07:01:46 2014
@@ -27,7 +27,7 @@ import java.util.concurrent.ConcurrentHa
  */
 public class Operator
 {
-    private String theOperator;
+    private final String theOperator;
     private byte[] imageData;
     private COSDictionary imageParameters;
 
@@ -57,7 +57,7 @@ public class Operator
      */
     public static Operator getOperator( String operator )
     {
-        Operator operation = null;
+        Operator operation;
         if( operator.equals( "ID" ) || operator.equals( "BI" ) )
         {
             //we can't cache the ID operators.
@@ -96,6 +96,7 @@ public class Operator
      *
      * @return A string rep of this class.
      */
+    @Override
     public String toString()
     {
         return "PDFOperator{" + theOperator + "}";

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/OperatorProcessor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/OperatorProcessor.java?rev=1642033&r1=1642032&r2=1642033&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/OperatorProcessor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/OperatorProcessor.java Thu Nov 27 07:01:46 2014
@@ -20,6 +20,8 @@ import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.contentstream.PDFStreamEngine;
 import java.util.List;
 import java.io.IOException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * Processes a PDF operator.
@@ -28,6 +30,11 @@ import java.io.IOException;
  */
 public abstract class OperatorProcessor
 {
+    /**
+     * Log instance.
+     */
+    private static final Log LOG = LogFactory.getLog(OperatorProcessor.class);
+
     /** The processing context. */
     protected PDFStreamEngine context;
 
@@ -66,6 +73,25 @@ public abstract class OperatorProcessor
 
     /**
      * Returns the name of this operator, e.g. "BI".
+     * @return operator name.
      */
     public abstract String getName();
+
+    /**
+     * Check the size of the arguments and puts out a warning if the size doesn't match.
+     *
+     * @param arguments Arguments for this operator.
+     * @param expectedSize Expected arguments size.
+     * @return true if size is correct, false if not.
+     */
+    protected boolean checkArgumentSize(List<COSBase> arguments, int expectedSize)
+    {
+        if (arguments.size() != expectedSize)
+        {
+            LOG.warn("'" + getName() + "' operator must have " + expectedSize
+                    + " parameters, but has " + arguments.size());
+            return false;
+}
+        return true;
+    }
 }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetColor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetColor.java?rev=1642033&r1=1642032&r2=1642033&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetColor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetColor.java Thu Nov 27 07:01:46 2014
@@ -25,6 +25,7 @@ import org.apache.pdfbox.contentstream.o
 
 import java.io.IOException;
 import java.util.List;
+import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceColorSpace;
 
 /**
  * sc,scn,SC,SCN: Sets the color to use for stroking or non-stroking operations.
@@ -36,9 +37,15 @@ public abstract class SetColor extends O
     @Override
     public void process(Operator operator, List<COSBase> arguments) throws IOException
     {
+        PDColorSpace colorSpace = getColorSpace();
+        if (colorSpace instanceof PDDeviceColorSpace
+                && !checkArgumentSize(arguments, colorSpace.getNumberOfComponents()))
+        {
+            return;
+        }
         COSArray array = new COSArray();
         array.addAll(arguments);
-        setColor(new PDColor(array, getColorSpace()));
+        setColor(new PDColor(array, colorSpace));
     }
 
     /**

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java?rev=1642033&r1=1642032&r2=1642033&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java Thu Nov 27 07:01:46 2014
@@ -19,7 +19,6 @@ package org.apache.pdfbox.contentstream.
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK;
 import org.apache.pdfbox.contentstream.operator.Operator;
 
 import java.io.IOException;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java?rev=1642033&r1=1642032&r2=1642033&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java Thu Nov 27 07:01:46 2014
@@ -19,7 +19,6 @@ package org.apache.pdfbox.contentstream.
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray;
 import org.apache.pdfbox.contentstream.operator.Operator;
 
 import java.io.IOException;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java?rev=1642033&r1=1642032&r2=1642033&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java Thu Nov 27 07:01:46 2014
@@ -19,7 +19,6 @@ package org.apache.pdfbox.contentstream.
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
 import org.apache.pdfbox.contentstream.operator.Operator;
 
 import java.io.IOException;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java?rev=1642033&r1=1642032&r2=1642033&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java Thu Nov 27 07:01:46 2014
@@ -19,7 +19,6 @@ package org.apache.pdfbox.contentstream.
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK;
 import org.apache.pdfbox.contentstream.operator.Operator;
 
 import java.io.IOException;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java?rev=1642033&r1=1642032&r2=1642033&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java Thu Nov 27 07:01:46 2014
@@ -19,7 +19,6 @@ package org.apache.pdfbox.contentstream.
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray;
 import org.apache.pdfbox.contentstream.operator.Operator;
 
 import java.io.IOException;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java?rev=1642033&r1=1642032&r2=1642033&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java Thu Nov 27 07:01:46 2014
@@ -19,7 +19,6 @@ package org.apache.pdfbox.contentstream.
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
-import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
 import org.apache.pdfbox.contentstream.operator.Operator;
 
 import java.io.IOException;