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/08/02 22:36:12 UTC

svn commit: r1615367 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java

Author: tilman
Date: Sat Aug  2 20:36:12 2014
New Revision: 1615367

URL: http://svn.apache.org/r1615367
Log:
PDFBOX-2251: avoid NoSuchElementException and put out warning when cmap format 4 subtable is empty

Modified:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java?rev=1615367&r1=1615366&r2=1615367&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java Sat Aug  2 20:36:12 2014
@@ -22,6 +22,8 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * An encoding entry for a cmap.
@@ -31,6 +33,12 @@ import java.util.Map.Entry;
  */
 public class CMAPEncodingEntry
 {
+
+    /**
+     * Log instance.
+     */
+    private static final Log LOG = LogFactory.getLog(CMAPEncodingEntry.class);
+
     private static final long LEAD_OFFSET = 0xD800 - (0x10000 >> 10);
     private static final long SURROGATE_OFFSET = 0x10000 - (0xD800 << 10) - 0xDC00;
 
@@ -401,6 +409,11 @@ public class CMAPEncodingEntry
          * this is the final result key=glyphId, value is character codes Create an array that contains MAX(GlyphIds)
          * element and fill this array with the .notdef character
          */
+        if (tmpGlyphToChar.isEmpty())
+        {
+            LOG.warn("cmap format 4 subtable is empty");
+            return;
+        }
         glyphIdToCharacterCode = new int[Collections.max(tmpGlyphToChar.keySet()) + 1];
         Arrays.fill(glyphIdToCharacterCode, 0);
         for (Entry<Integer, Integer> entry : tmpGlyphToChar.entrySet())
@@ -555,17 +568,16 @@ public class CMAPEncodingEntry
      */
     private class SubHeader
     {
-
-        private int firstCode;
-        private int entryCount;
+        private final int firstCode;
+        private final int entryCount;
         /**
          * used to compute the GlyphIndex : P = glyphIndexArray.SubArray[pos] GlyphIndex = P + idDelta % 65536.
          */
-        private short idDelta;
+        private final short idDelta;
         /**
          * Number of bytes to skip to reach the firstCode in the glyphIndexArray.
          */
-        private int idRangeOffset;
+        private final int idRangeOffset;
 
         private SubHeader(int firstCodeValue, int entryCountValue, short idDeltaValue, int idRangeOffsetValue)
         {