Author: tilman
Date: Thu Jul 30 09:03:22 2026
New Revision: 1936724

Log:
PDFBOX-6228: catch cycle

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

Modified: 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
     Thu Jul 30 09:03:19 2026        (r1936723)
+++ 
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
     Thu Jul 30 09:03:22 2026        (r1936724)
@@ -17,7 +17,12 @@
 package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure;
 
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
@@ -41,6 +46,8 @@ public class PDStructureElement extends
     
     public static final String TYPE = "StructElem";
 
+    private static final Log LOG = LogFactory.getLog(PDStructureElement.class);
+
     /**
      * Constructor with required values.
      *
@@ -732,9 +739,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