Author: tilman
Date: Sat Jun 28 15:49:20 2025
New Revision: 1926833

URL: http://svn.apache.org/viewvc?rev=1926833&view=rev
Log:
PDFBOX-6029: avoid NPE; add test

Modified:
    pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/DateType.java
    
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java

Modified: pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/DateType.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/DateType.java?rev=1926833&r1=1926832&r2=1926833&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/DateType.java 
(original)
+++ pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/DateType.java Sat 
Jun 28 15:49:20 2025
@@ -146,6 +146,10 @@ public class DateType extends AbstractSi
     @Override
     public String getStringValue()
     {
+        if (dateValue == null)
+        {
+            return null;
+        }
         return DateConverter.toISO8601(dateValue);
     }
 

Modified: 
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java?rev=1926833&r1=1926832&r2=1926833&view=diff
==============================================================================
--- 
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java
 (original)
+++ 
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java
 Sat Jun 28 15:49:20 2025
@@ -370,6 +370,31 @@ class DeserializationTest
         checkTransform(metadata, 
"90022311886271402508155234494196354960301469636090129252744270615851988530557");
     }
 
+    /**
+     * PDFBOX-6029: serialize an empty date property, this brought a 
NullPointerException.
+     *
+     * @throws XmpParsingException
+     * @throws TransformerException
+     * @throws NoSuchAlgorithmException 
+     */
+    @Test
+    void testEmptyDate() throws XmpParsingException, TransformerException, 
NoSuchAlgorithmException
+    {
+        String xmpmeta = "<?xpacket begin=\"\" 
id=\"W5M0MpCehiHzreSzNTczkc9d\"?>\n"
+                + "<x:xmpmeta x:xmptk=\"Adobe XMP Core 4.2.1-c041 52.342996, 
2008/05/07-20:48:00\" xmlns:x=\"adobe:ns:meta/\">\n"
+                + "  <rdf:RDF 
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\";>\n"
+                + "   <rdf:Description rdf:about=\"\" 
xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\";>\n"
+                + "    <xmp:CreateDate></xmp:CreateDate>\n"
+                + "   </rdf:Description>\n"
+                + "  </rdf:RDF>\n"
+                + "</x:xmpmeta>\n"
+                + "<?xpacket end=\"w\"?>";
+        DomXmpParser xmpParser = new DomXmpParser();
+        xmpParser.setStrictParsing(false);
+        XMPMetadata xmp = xmpParser.parse(xmpmeta.getBytes());
+        checkTransform(xmp, 
"12127125812762553969536294425864809210802519304519294152028982122058554009237");
+    }
+
     private void checkTransform(XMPMetadata metadata, String expected)
             throws TransformerException, NoSuchAlgorithmException
     {
@@ -378,6 +403,7 @@ class DeserializationTest
         byte[] ba = replaced.getBytes(StandardCharsets.UTF_8);
         byte[] digest = MessageDigest.getInstance("SHA-256").digest(ba);
         String result = new BigInteger(1, digest).toString();
+        System.out.println(replaced);
         assertEquals(expected, result);
     }
 }


Reply via email to