Author: tilman Date: Wed May 22 11:35:05 2024 New Revision: 1917893 URL: http://svn.apache.org/viewvc?rev=1917893&view=rev Log: PDFBOX-5826: check for /Type and /Subtype in metadata
Modified: pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java Modified: pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java?rev=1917893&r1=1917892&r2=1917893&view=diff ============================================================================== --- pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java (original) +++ pdfbox/branches/2.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java Wed May 22 11:35:05 2024 @@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.List; import javax.imageio.ImageIO; import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.cos.COSStream; import org.apache.pdfbox.pdmodel.PDDocument; @@ -63,7 +64,7 @@ public class MetadataValidationProcess e { PDDocument document = ctx.getDocument(); - InputStream is = getXpacket(document); + InputStream is = getXpacket(document, ctx); DomXmpParser builder = new DomXmpParser(); XMPMetadata metadata = builder.parse(is); is.close(); @@ -254,7 +255,7 @@ public class MetadataValidationProcess e /** * Return the xpacket from the dictionary's stream */ - private static InputStream getXpacket(PDDocument document) + private InputStream getXpacket(PDDocument document, PreflightContext ctx) throws IOException, XpacketParsingException { PDDocumentCatalog catalog = document.getDocumentCatalog(); @@ -284,6 +285,19 @@ public class MetadataValidationProcess e "Filter specified in metadata dictionary"); throw new XpacketParsingException("Failed while retrieving xpacket", error); } + COSDictionary metadataDict = metadata.getCOSObject(); + String type = metadataDict.getNameAsString(COSName.TYPE); + if (!"Metadata".equals(type)) + { + addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_FORMAT, + "Missing or wrong /Type key in Metadata stream dictionary")); + } + String subType = metadataDict.getNameAsString(COSName.SUBTYPE); + if (!"XML".equals(subType)) + { + addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_FORMAT, + "Missing or wrong /Subtype key in Metadata stream dictionary")); + } return metadata.exportXMPMetadata(); }