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