Author: tilman
Date: Fri Jan 30 16:06:42 2026
New Revision: 1931611

Log:
PDFBOX-5660: avoid ArrayIndexOutOfBoundsException, as suggested by Ze Sheng; 
closes #411

Modified:
   pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java
   
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
   
pdfbox/branches/2.0/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java

Modified: 
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java
==============================================================================
--- pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java 
Fri Jan 30 14:29:43 2026        (r1931610)
+++ pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java 
Fri Jan 30 16:06:42 2026        (r1931611)
@@ -197,6 +197,10 @@ public class CMap
      */
     void addCharMapping(byte[] codes, String unicode)
     {
+        if (codes.length == 0)
+        {
+            return;
+        }
         if (codes.length <= 2)
         {
             unicodeToByteCodes.put(unicode, CMapStrings.getByteValue(codes));

Modified: 
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
==============================================================================
--- 
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
   Fri Jan 30 14:29:43 2026        (r1931610)
+++ 
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
   Fri Jan 30 16:06:42 2026        (r1931611)
@@ -775,6 +775,10 @@ public class CMapParser
 
     private boolean increment(byte[] data, int position, boolean useStrictMode)
     {
+        if (position < 0)
+        {
+            return false;
+        }
         if (position > 0 && (data[position] & 0xFF) == 255)
         {
             // PDFBOX-4661: avoid overflow of the last byte, all following 
values are undefined

Modified: 
pdfbox/branches/2.0/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java
==============================================================================
--- 
pdfbox/branches/2.0/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java
       Fri Jan 30 14:29:43 2026        (r1931610)
+++ 
pdfbox/branches/2.0/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java
       Fri Jan 30 16:06:42 2026        (r1931611)
@@ -16,6 +16,7 @@
  */
 package org.apache.fontbox.cmap;
 
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
@@ -192,4 +193,11 @@ public class TestCMapParser extends Test
 
     }
 
+    public void testBadIncrement() throws IOException
+    {
+        byte[] cmapData = "1 beginbfrange\n<> <> 
<2223>\nendbfrange".getBytes("US-ASCII");
+        CMapParser parser = new CMapParser();
+        CMap cmap = parser.parse(new ByteArrayInputStream(cmapData));
+        assertNotNull(cmap);
+    }
 }

Reply via email to