Author: tilman
Date: Fri Jan 30 16:06:49 2026
New Revision: 1931612

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

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

Modified: 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
==============================================================================
--- 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
   Fri Jan 30 16:06:42 2026        (r1931611)
+++ 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
   Fri Jan 30 16:06:49 2026        (r1931612)
@@ -797,6 +797,10 @@ public class CMapParser
 
     private static 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/3.0/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java
==============================================================================
--- 
pdfbox/branches/3.0/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java
       Fri Jan 30 16:06:42 2026        (r1931611)
+++ 
pdfbox/branches/3.0/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java
       Fri Jan 30 16:06:49 2026        (r1931612)
@@ -19,15 +19,16 @@ package org.apache.fontbox.cmap;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import org.apache.pdfbox.io.RandomAccessReadBuffer;
 
 import org.apache.pdfbox.io.RandomAccessReadBufferedFile;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -245,4 +246,13 @@ class TestCMapParser
                 "Indentity 0xFFFF");
 
     }
+
+    @Test
+    void testBadIncrement() throws IOException
+    {
+        byte[] cmapData = "1 beginbfrange\n<> <> 
<2223>\nendbfrange".getBytes("US-ASCII");
+        CMapParser parser = new CMapParser();
+        CMap cmap = parser.parse(new RandomAccessReadBuffer(cmapData));
+        assertNotNull(cmap);
+    }
 }

Reply via email to