Author: tilman
Date: Thu Jul 30 09:03:19 2026
New Revision: 1936723

Log:
PDFBOX-6228: catch cycle

Modified:
   
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
    Thu Jul 30 08:49:31 2026        (r1936722)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
    Thu Jul 30 09:03:19 2026        (r1936723)
@@ -18,7 +18,12 @@ package org.apache.pdfbox.pdmodel.docume
 
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
@@ -42,6 +47,8 @@ public class PDStructureElement extends
     
     public static final String TYPE = "StructElem";
 
+    private static final Logger LOG = 
LogManager.getLogger(PDStructureElement.class);
+
     /**
      * Constructor with required values.
      *
@@ -731,9 +738,15 @@ public class PDStructureElement extends
      */
     private PDStructureTreeRoot getStructureTreeRoot()
     {
+        Set<COSDictionary> visited = new HashSet<>();
         PDStructureNode parent = this.getParent();
         while (parent instanceof PDStructureElement)
         {
+            if (!visited.add(parent.getCOSObject()))
+            {
+                LOG.warn("Element ignored: {}", parent.getCOSObject());
+                return null; // Cycle detected
+            }
             parent = ((PDStructureElement) parent).getParent();
         }
         if (parent instanceof PDStructureTreeRoot)

Reply via email to