Author: tilman
Date: Thu Jul 30 09:03:26 2026
New Revision: 1936725

Log:
PDFBOX-6228: catch cycle

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

Modified: 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
==============================================================================
--- 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
     Thu Jul 30 09:03:22 2026        (r1936724)
+++ 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
     Thu Jul 30 09:03:26 2026        (r1936725)
@@ -16,7 +16,12 @@
  */
 package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure;
 
+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;
@@ -40,6 +45,8 @@ public class PDStructureElement extends
     
     public static final String TYPE = "StructElem";
 
+   private static final Log LOG = LogFactory.getLog(PDStructureElement.class);
+
     /**
      * Constructor with required values.
      *
@@ -739,9 +746,15 @@ public class PDStructureElement extends
      */
     private PDStructureTreeRoot getStructureTreeRoot()
     {
+        Set<COSDictionary> visited = new HashSet<COSDictionary>();
         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