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