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);
+ }
}