Author: msahyoun
Date: Thu May 28 08:38:39 2026
New Revision: 1934716

Log:
PDFBOX-6207: handle empty string in /Opt entry

Modified:
   pdfbox/trunk/pdfbox/pom.xml
   
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java
   
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestCheckBox.java

Modified: pdfbox/trunk/pdfbox/pom.xml
==============================================================================
--- pdfbox/trunk/pdfbox/pom.xml Thu May 28 08:35:49 2026        (r1934715)
+++ pdfbox/trunk/pdfbox/pom.xml Thu May 28 08:38:39 2026        (r1934716)
@@ -959,6 +959,19 @@
                             
<sha512>83bc557e6f7d3e98de6e81168b2e2fb3def5025cc5fab1ddb3ef658505351c615253587f09b93503bb73a6225f3d3898be894e9d05dba8d464f4dd9c54514bc3</sha512>
                         </configuration>
                     </execution>
+                    <execution>
+                        <id>PDFBOX-6207</id>
+                        <phase>generate-test-resources</phase>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <configuration>
+                            
<url>https://issues.apache.org/jira/secure/attachment/13082507/form_with_checkbox.pdf</url>
+                            
<outputDirectory>${project.build.directory}/pdfs</outputDirectory>
+                            <outputFileName>PDFBOX-6207.pdf</outputFileName>
+                            
<sha512>3c8020c1114e2267fdc4e525eed04fd452c75eab4fb0c5d60340983d91af52aca330383a4430934de82e73ddfcd17eec55f1426bd0756b7d11510fadf1043cf9</sha512>
+                        </configuration>
+                    </execution>
                 </executions>
             </plugin>
         </plugins>

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java
  Thu May 28 08:35:49 2026        (r1934715)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java
  Thu May 28 08:38:39 2026        (r1934716)
@@ -253,6 +253,11 @@ public abstract class PDButton extends P
         
         if (value instanceof COSString)
         {
+            COSString stringValue = (COSString) value;
+            if (stringValue.getString().isEmpty())
+            {
+                return Collections.emptyList();
+            }
             return Collections.singletonList(((COSString) value).getString());
         }
         else if (value instanceof COSArray)

Modified: 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestCheckBox.java
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestCheckBox.java
      Thu May 28 08:35:49 2026        (r1934715)
+++ 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestCheckBox.java
      Thu May 28 08:38:39 2026        (r1934716)
@@ -16,15 +16,18 @@
  */
 package org.apache.pdfbox.pdmodel.interactive.form;
 
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.pdfbox.Loader;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
@@ -125,4 +128,31 @@ class TestCheckBox
             assertEquals("Off", checkBox.getValue());
         }
     }
+
+    /**
+     * PDFBOX-6207 Invalid /Opt entry. String instead of array of strings.
+     * 
+     * @throws IOException
+     */
+    @Test
+    void testPDFBox6207() throws IOException
+    {
+        File pdfFile = new File("target/pdfs/PDFBOX-6207.pdf");
+        
+        if (!pdfFile.exists())
+        {
+            return;  // Skip test if PDF not available
+        }
+
+        try (PDDocument testPdf = Loader.loadPDF(pdfFile))
+        {
+            PDAcroForm acroForm = testPdf.getDocumentCatalog().getAcroForm();
+            PDCheckBox field = (PDCheckBox) 
acroForm.getField("Check_Info_Post_andere");
+            System.out.println(field.getExportValues());
+            assertDoesNotThrow(() -> {
+                field.setValue("Yes");
+         
+            }, "Setting a valid value of a checkbox with an invalid /Opt entry 
should not throw an exception");
+        }
+    }
 }
\ No newline at end of file

Reply via email to