Author: tilman
Date: Mon Dec 15 12:36:44 2025
New Revision: 1930590
Log:
PDFBOX-5660: expand test coverage
Modified:
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
Modified:
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
==============================================================================
---
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
Mon Dec 15 12:36:40 2025 (r1930589)
+++
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
Mon Dec 15 12:36:44 2025 (r1930590)
@@ -28,6 +28,7 @@ import java.util.Calendar;
import java.util.List;
import org.apache.xmpbox.XMPMetadata;
+import org.apache.xmpbox.schema.AdobePDFSchema;
import org.apache.xmpbox.schema.DublinCoreSchema;
import org.apache.xmpbox.schema.PDFAIdentificationSchema;
import org.apache.xmpbox.schema.PhotoshopSchema;
@@ -555,4 +556,91 @@ class DomXmpParserTest
assertEquals("Important subject", subjects.get(0));
assertEquals("Unimportant subject", subjects.get(1));
}
+
+ @Test
+ void testBadType() throws XmpParsingException
+ {
+ String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"
standalone=\"no\"?>\n" +
+ "<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>\n" +
+ "<rdf:RDF
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n" +
+ " xmlns:iX=\"http://ns.adobe.com/iX/1.0/\">\n" +
+ " <rdf:Description
xmlns=\"http://ns.adobe.com/pdf/1.3/\"\n" +
+ "
xmlns:pdf=\"http://ns.adobe.com/pdf/1.3/\"\n" +
+ " about=\"\"\n" +
+ " pdf:Author=\"edocslib\"/>\n" +
+ "</rdf:RDF>\n" +
+ "<?xpacket end='r'?>";
+ XmpParsingException ex = assertThrows(
+ XmpParsingException.class,
+ () -> new
DomXmpParser().parse(s.getBytes(StandardCharsets.UTF_8)));
+ assertEquals("No type defined for
{http://ns.adobe.com/pdf/1.3/}Author", ex.getMessage());
+ DomXmpParser xmpParser = new DomXmpParser();
+ xmpParser.setStrictParsing(false);
+ XMPMetadata xmp = xmpParser.parse(s.getBytes(StandardCharsets.UTF_8));
+ AdobePDFSchema adobePDFSchema = xmp.getAdobePDFSchema();
+ TextType tt = (TextType) adobePDFSchema.getProperty("Author");
+ assertEquals("[Author=TextType:edocslib]", tt.toString());
+ }
+
+ @Test
+ void testBadLocalName() throws XmpParsingException
+ {
+ String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"
standalone=\"no\"?>\n" +
+ "<?xpacket begin=''
id='W5M0MpCehiHzreSzNTczkc9d'?><?adobe-xap-filters esc=\"CR\"?>\n" +
+ "<x:xapmeta xmlns:x=\"adobe:ns:meta/\">\n" +
+ " <rdf:RDF xmlns:iX=\"http://ns.adobe.com/iX/1.0/\"
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n" +
+ " </rdf:RDF>\n" +
+ "</x:xapmeta><?xpacket end='w'?>";
+ XmpParsingException ex = assertThrows(
+ XmpParsingException.class,
+ () -> new
DomXmpParser().parse(s.getBytes(StandardCharsets.UTF_8)));
+ assertEquals("Expecting local name 'xmpmeta' and found 'xapmeta'",
ex.getMessage());
+ }
+
+ @Test
+ void testBadXPacketEnd1() throws XmpParsingException
+ {
+ String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"
standalone=\"no\"?>\n" +
+ "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"
?><x:xmpmeta xmlns:x=\"adobe:ns:meta/\">\n" +
+ " <rdf:RDF
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n" +
+ " <rdf:Description
xmlns:dc=\"http://purl.org/dc/elements/1.1/\" rdf:about=\"\">\n" +
+ " <dc:format>application/pdf</dc:format>\n" +
+ " </rdf:Description>\n" +
+ " </rdf:RDF>\n" +
+ "</x:xmpmeta><?xpacket ends=\"w\" ?>";
+ XmpParsingException ex = assertThrows(
+ XmpParsingException.class,
+ () -> new
DomXmpParser().parse(s.getBytes(StandardCharsets.UTF_8)));
+ assertEquals("Excepted xpacket 'end' attribute (must be present and
placed in first)", ex.getMessage());
+ }
+
+ @Test
+ void testBadXPacketEnd2() throws XmpParsingException
+ {
+ String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"
standalone=\"no\"?>\n" +
+ "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"
?><x:xmpmeta xmlns:x=\"adobe:ns:meta/\">\n" +
+ " <rdf:RDF
xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n" +
+ " <rdf:Description
xmlns:dc=\"http://purl.org/dc/elements/1.1/\" rdf:about=\"\">\n" +
+ " <dc:format>application/pdf</dc:format>\n" +
+ " </rdf:Description>\n" +
+ " </rdf:RDF>\n" +
+ "</x:xmpmeta><?xpacket end=\"k\" ?>";
+ XmpParsingException ex = assertThrows(
+ XmpParsingException.class,
+ () -> new
DomXmpParser().parse(s.getBytes(StandardCharsets.UTF_8)));
+ assertEquals("Excepted xpacket 'end' attribute with value 'r' or 'w'
", ex.getMessage());
+ }
+
+ @Test
+ void testNoRdfChildren() throws XmpParsingException
+ {
+ String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"
standalone=\"no\"?>\n" +
+ "<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\" ?>"
+
+ " <x:xmpmeta xmlns:x=\"adobe:ns:meta/\"/>\n" +
+ "<?xpacket end=\"w\" ?>";
+ XmpParsingException ex = assertThrows(
+ XmpParsingException.class,
+ () -> new
DomXmpParser().parse(s.getBytes(StandardCharsets.UTF_8)));
+ assertEquals("No rdf description found in xmp", ex.getMessage());
+ }
}