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:31 UTC

svn commit: r1901730 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java

Author: tilman
Date: Tue Jun  7 15:51:31 2022
New Revision: 1901730

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

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

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java?rev=1901730&r1=1901729&r2=1901730&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java Tue Jun  7 15:51:31 2022
@@ -22,6 +22,9 @@ 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,
@@ -34,6 +37,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 +54,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