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