Author: tilman
Date: Thu Jul 30 14:58:18 2026
New Revision: 1936739

Log:
PDFBOX-6227: add test

Modified:
   
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormTest.java

Modified: 
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormTest.java
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormTest.java
     Thu Jul 30 14:58:14 2026        (r1936738)
+++ 
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroFormTest.java
     Thu Jul 30 14:58:18 2026        (r1936739)
@@ -21,6 +21,7 @@ import static org.junit.jupiter.api.Asse
 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayOutputStream;
@@ -436,6 +437,43 @@ class PDAcroFormTest
         }
     }
 
+    /**
+     * PDFBOX-6227: Check that cycle is caught in repair.
+     *
+     * @throws IOException 
+     */
+    @Test
+    void testCycle() throws IOException
+    {
+        try (PDDocument doc = new PDDocument())
+        {
+            PDPage page = new PDPage();
+            doc.addPage(page);
+
+            PDAcroForm theAcroForm = new PDAcroForm(doc);
+            theAcroForm.setNeedAppearances(true);
+            doc.getDocumentCatalog().setAcroForm(theAcroForm);
+            theAcroForm.setDefaultResources(new PDResources());
+
+            PDTextField textBox = new PDTextField(theAcroForm);
+            textBox.setPartialName("SampleField");
+
+            textBox.setDefaultAppearance("/Helv 0 Ff 0 g");
+            // field not added to force repair
+
+            PDAnnotationWidget widget = textBox.getWidgets().get(0);
+            PDRectangle rect = new PDRectangle(50, 750, 200, 20);
+            assertThrows(IllegalArgumentException.class, () -> 
widget.setParent(textBox));
+            widget.getCOSObject().setItem(COSName.PARENT, 
widget.getCOSObject());
+            widget.setRectangle(rect);
+            widget.setPage(page);
+
+            page.getAnnotations().add(widget);
+
+            
assertTrue(doc.getDocumentCatalog().getAcroForm().getFields().isEmpty());
+        }
+    }
+
     @AfterEach
     void tearDown() throws IOException
     {

Reply via email to