You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2024/05/22 11:34:48 UTC
svn commit: r1917892 - /pdfbox/branches/3.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java
Author: tilman
Date: Wed May 22 11:34:48 2024
New Revision: 1917892
URL: http://svn.apache.org/viewvc?rev=1917892&view=rev
Log:
PDFBOX-5826: check for /Type and /Subtype in metadata
Modified:
pdfbox/branches/3.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java
Modified: pdfbox/branches/3.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/3.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java?rev=1917892&r1=1917891&r2=1917892&view=diff
==============================================================================
--- pdfbox/branches/3.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java (original)
+++ pdfbox/branches/3.0/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java Wed May 22 11:34:48 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;
@@ -65,7 +66,7 @@ public class MetadataValidationProcess e
XMPMetadata metadata;
DomXmpParser builder = new DomXmpParser();
- try (InputStream is = getXpacket(document))
+ try (InputStream is = getXpacket(document, ctx))
{
metadata = builder.parse(is);
}
@@ -253,7 +254,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();
@@ -274,7 +275,8 @@ public class MetadataValidationProcess e
throw new XpacketParsingException("Failed while retrieving xpacket", error);
}
- if (metadata.getCOSObject().containsKey(COSName.FILTER))
+ COSDictionary metadataDict = metadata.getCOSObject();
+ if (metadataDict.containsKey(COSName.FILTER))
{
// filter key should not be defined
ValidationError error = new ValidationError(
@@ -282,6 +284,18 @@ public class MetadataValidationProcess e
"Filter specified in metadata dictionary");
throw new XpacketParsingException("Failed while retrieving xpacket", error);
}
+ 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();
}