Author: tilman
Date: Tue Nov 25 16:02:05 2025
New Revision: 1929988

Log:
PDFBOX-6105: maxComponentDepth should be at least 1

Modified:
   
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphTable.java
   
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/MaximumProfileTable.java

Modified: 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphTable.java
==============================================================================
--- 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphTable.java
    Tue Nov 25 15:29:43 2025        (r1929987)
+++ 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphTable.java
    Tue Nov 25 16:02:05 2025        (r1929988)
@@ -174,7 +174,7 @@ public class GlyphTable extends TTFTable
     {
         if (level > maxp.getMaxComponentDepth())
         {
-            throw new IOException("composite glyph maximum level reached");
+            throw new IOException("composite glyph maximum level (" + 
maxp.getMaxComponentDepth() + ") reached");
         }
         GlyphData glyph = new GlyphData();
         int leftSideBearing = hmt == null ? 0 : hmt.getLeftSideBearing(gid);

Modified: 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/MaximumProfileTable.java
==============================================================================
--- 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/MaximumProfileTable.java
   Tue Nov 25 15:29:43 2025        (r1929987)
+++ 
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/MaximumProfileTable.java
   Tue Nov 25 16:02:05 2025        (r1929988)
@@ -18,6 +18,9 @@ package org.apache.fontbox.ttf;
 
 import java.io.IOException;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 /**
  * This 'maxp'-table is a required table in a TrueType font.
  *
@@ -25,6 +28,8 @@ import java.io.IOException;
  */
 public class MaximumProfileTable extends TTFTable
 {
+    private static final Log LOG = 
LogFactory.getLog(MaximumProfileTable.class);
+
     /**
      * A tag that identifies this table type.
      */
@@ -48,7 +53,6 @@ public class MaximumProfileTable extends
 
     MaximumProfileTable()
     {
-        super();
     }
 
     /**
@@ -289,6 +293,11 @@ public class MaximumProfileTable extends
             maxSizeOfInstructions = data.readUnsignedShort();
             maxComponentElements = data.readUnsignedShort();
             maxComponentDepth = data.readUnsignedShort();
+            if (maxComponentDepth == 0)
+            {
+                LOG.warn("maxComponentDepth is 0, set to 1");
+                maxComponentDepth = 1;
+            }
         }
         initialized = true;
     }

Reply via email to