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 2020/09/21 17:15:59 UTC

svn commit: r1881904 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java

Author: tilman
Date: Mon Sep 21 17:15:59 2020
New Revision: 1881904

URL: http://svn.apache.org/viewvc?rev=1881904&view=rev
Log:
PDFBOX-4959: avoid ClassCastExceptions

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java?rev=1881904&r1=1881903&r2=1881904&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java Mon Sep 21 17:15:59 2020
@@ -20,6 +20,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
@@ -41,6 +43,8 @@ import org.apache.pdfbox.util.Vector;
  */
 public abstract class PDCIDFont implements COSObjectable, PDFontLike, PDVectorFont
 {
+    private static final Log LOG = LogFactory.getLog(PDCIDFont.class);
+
     protected final PDType0Font parent;
 
     private Map<Integer, Float> widths;
@@ -78,7 +82,13 @@ public abstract class PDCIDFont implemen
             int counter = 0;
             while (counter < size)
             {
-                COSNumber firstCode = (COSNumber) wArray.getObject(counter++);
+                COSBase firstCodeBase = wArray.getObject(counter++);
+                if (!(firstCodeBase instanceof COSNumber))
+                {
+                    LOG.warn("Expected a number array member, got " + firstCodeBase);
+                    continue;
+                }
+                COSNumber firstCode = (COSNumber) firstCodeBase;
                 COSBase next = wArray.getObject(counter++);
                 if (next instanceof COSArray)
                 {
@@ -87,14 +97,29 @@ public abstract class PDCIDFont implemen
                     int arraySize = array.size();
                     for (int i = 0; i < arraySize; i++)
                     {
-                        COSNumber width = (COSNumber) array.getObject(i);
-                        widths.put(startRange + i, width.floatValue());
+                        COSBase widthBase = array.getObject(i);
+                        if (widthBase instanceof COSNumber)
+                        {
+                            COSNumber width = (COSNumber) widthBase;
+                            widths.put(startRange + i, width.floatValue());
+                        }
+                        else
+                        {
+                            LOG.warn("Expected a number array member, got " + widthBase);
+                        }
                     }
                 }
                 else
                 {
-                    COSNumber secondCode = (COSNumber) next;
-                    COSNumber rangeWidth = (COSNumber) wArray.getObject(counter++);
+                    COSBase secondCodeBase = next;
+                    COSBase rangeWidthBase = wArray.getObject(counter++);
+                    if (!(secondCodeBase instanceof COSNumber) || !(rangeWidthBase instanceof COSNumber))
+                    {
+                        LOG.warn("Expected two numbers, got " + secondCodeBase + " and " + rangeWidthBase);
+                        continue;
+                    }
+                    COSNumber secondCode = (COSNumber) secondCodeBase;
+                    COSNumber rangeWidth = (COSNumber) rangeWidthBase;
                     int startRange = firstCode.intValue();
                     int endRange = secondCode.intValue();
                     float width = rangeWidth.floatValue();