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 2022/06/07 15:51:35 UTC

svn commit: r1901731 - /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java

Author: tilman
Date: Tue Jun  7 15:51:34 2022
New Revision: 1901731

URL: http://svn.apache.org/viewvc?rev=1901731&view=rev
Log:
PDFBOX-5453: avoid ClassCastException

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java?rev=1901731&r1=1901730&r2=1901731&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java Tue Jun  7 15:51:34 2022
@@ -23,6 +23,10 @@ import org.apache.pdfbox.cos.COSNumber;
 import java.io.IOException;
 import java.util.Arrays;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.cos.COSBase;
+
 /**
  * A color value, consisting of one or more color components, or for pattern color spaces,
  * a name and optional color components.
@@ -34,6 +38,8 @@ import java.util.Arrays;
  */
 public final class PDColor
 {
+    private static final Log LOG = LogFactory.getLog(PDColor.class);
+
     private final float[] components;
     private final COSName patternName;
     private final PDColorSpace colorSpace;
@@ -49,27 +55,46 @@ public final class PDColor
         {
             // color components (optional), for the color of an uncoloured tiling pattern
             components = new float[array.size() - 1];
-            for (int i = 0; i < components.length; i++)
-            {
-                components[i] = ((COSNumber)array.get(i)).floatValue();
-            }
+            initComponents(array);
 
             // pattern name (required)
-            patternName = (COSName)array.get(array.size() - 1);
+            COSBase base = array.get(array.size() - 1);
+            if (base instanceof COSName)
+            {
+                patternName = (COSName) base;
+            }
+            else
+            {
+                LOG.warn("pattern name in " + array + " isn't a name, ignored");
+                patternName = COSName.getPDFName("Unknown");
+            }
         }
         else
         {
             // color components only
             components = new float[array.size()];
-            for (int i = 0; i < array.size(); i++)
-            {
-                components[i] = ((COSNumber)array.get(i)).floatValue();
-            }
+            initComponents(array);
             patternName = null;
         }
         this.colorSpace = colorSpace;
     }
 
+    private void initComponents(COSArray array)
+    {
+        for (int i = 0; i < components.length; i++)
+        {
+            COSBase base = array.get(i);
+            if (base instanceof COSNumber)
+            {
+                components[i] = ((COSNumber) base).floatValue();
+            }
+            else
+            {
+                LOG.warn("color component " + i + " in " + array + " isn't a number, ignored");
+            }
+        }
+    }
+
     /**
      * Creates a PDColor containing the given color component values.
      * @param components array of color component values