You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2026/07/30 08:24:40 UTC

svn commit: r1936712 - pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor

Author: tilman
Date: Thu Jul 30 08:24:39 2026
New Revision: 1936712

Log:
PDFBOX-6227: catch cycle

Modified:
   pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java	Thu Jul 30 06:54:59 2026	(r1936711)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fixup/processor/AcroFormOrphanWidgetsProcessor.java	Thu Jul 30 08:24:39 2026	(r1936712)
@@ -19,8 +19,10 @@ package org.apache.pdfbox.pdmodel.fixup.
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
@@ -188,8 +190,14 @@ public class AcroFormOrphanWidgetsProces
      */
     private PDField resolveNonRootField(PDAcroForm acroForm, COSDictionary parent, Map<String, PDField> nonTerminalFieldsMap)
     {
+        Set<COSDictionary> visited = new HashSet<>();
         while (parent.containsKey(COSName.PARENT))
         {
+            if (!visited.add(parent))
+            {
+                LOG.warn("Field ignored: {}", parent);
+                return null; // Cycle detected
+            }
             parent = parent.getCOSDictionary(COSName.PARENT);
             if (parent == null)
             {