diff --git a/validator/src/main/java/org/mustangproject/validator/PDFValidator.java b/validator/src/main/java/org/mustangproject/validator/PDFValidator.java index d1ba1afc..632a535f 100644 --- a/validator/src/main/java/org/mustangproject/validator/PDFValidator.java +++ b/validator/src/main/java/org/mustangproject/validator/PDFValidator.java @@ -150,7 +150,14 @@ public class PDFValidator extends Validator { final DocumentBuilder builder = factory.newDocumentBuilder(); final InputSource is = new InputSource(new StringReader(xmp)); - docXMP = builder.parse(is); + try { + docXMP = builder.parse(is); + } catch (Exception e) { + context.addResultItem( + new ValidationResultItem(ESeverity.error, "XMP Metadata: Could not parse XMP metadata") + .setSection(10).setPart(EPart.pdf)); + throw e; + } final XPathFactory xpathFactory = XPathFactory.newInstance(); diff --git a/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java b/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java index 7fe508b7..cf7a345e 100644 --- a/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java +++ b/validator/src/test/java/org/mustangproject/validator/PDFValidatorTest.java @@ -169,6 +169,16 @@ public class PDFValidatorTest extends ResourceCase { assertEquals(false, actual.contains("XMP Metadata: Could not parse XMP metadata")); } catch (final IrrecoverableValidationError e) { // ignore, will be in XML output anyway } diff --git a/validator/src/test/resources/invalidXMP-ParseError.pdf b/validator/src/test/resources/invalidXMP-ParseError.pdf new file mode 100644 index 00000000..838b1a8a Binary files /dev/null and b/validator/src/test/resources/invalidXMP-ParseError.pdf differ