From 48800a042410dcbf3a619d299e775e40e5eda7cd Mon Sep 17 00:00:00 2001 From: Tobias Fischer Date: Tue, 7 Aug 2018 15:50:30 +0200 Subject: [PATCH] add dc:identifier UUID validation // fixes #853 --- .../adobe/epubcheck/messages/MessageDictionary.java | 1 + .../com/adobe/epubcheck/messages/MessageId.java | 1 + .../java/com/adobe/epubcheck/opf/OPFHandler.java | 13 +++++++++++++ .../epubcheck/messages/MessageBundle.properties | 1 + 4 files changed, 16 insertions(+) diff --git a/src/main/java/com/adobe/epubcheck/messages/MessageDictionary.java b/src/main/java/com/adobe/epubcheck/messages/MessageDictionary.java index 1a6bade3a..d4f04e134 100644 --- a/src/main/java/com/adobe/epubcheck/messages/MessageDictionary.java +++ b/src/main/java/com/adobe/epubcheck/messages/MessageDictionary.java @@ -283,6 +283,7 @@ static Map getDefaultSeverities() map.put(MessageId.OPF_082, Severity.ERROR); map.put(MessageId.OPF_083, Severity.ERROR); map.put(MessageId.OPF_084, Severity.ERROR); + map.put(MessageId.OPF_085, Severity.ERROR); // PKG map.put(MessageId.PKG_001, Severity.WARNING); diff --git a/src/main/java/com/adobe/epubcheck/messages/MessageId.java b/src/main/java/com/adobe/epubcheck/messages/MessageId.java index 224ec54c5..6c25447b4 100644 --- a/src/main/java/com/adobe/epubcheck/messages/MessageId.java +++ b/src/main/java/com/adobe/epubcheck/messages/MessageId.java @@ -246,6 +246,7 @@ public enum MessageId implements Comparable OPF_082("OPF-082"), OPF_083("OPF-083"), OPF_084("OPF-084"), + OPF_085("OPF-085"), // Messages relating to the entire package PKG_001("PKG-001"), diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFHandler.java b/src/main/java/com/adobe/epubcheck/opf/OPFHandler.java index 865f9d5f0..637687ed3 100755 --- a/src/main/java/com/adobe/epubcheck/opf/OPFHandler.java +++ b/src/main/java/com/adobe/epubcheck/opf/OPFHandler.java @@ -29,6 +29,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.Vector; import com.adobe.epubcheck.api.EPUBLocation; @@ -507,6 +508,18 @@ else if (e.getNamespace().equals("http://purl.org/dc/elements/1.1/")) if (idval != null) { report.info(null, FeatureEnum.UNIQUE_IDENT, idval.trim()); + + uid = idval.trim(); + + // #853 + String opfSchemeAttr = e.getAttributeNS("http://www.idpf.org/2007/opf", "scheme"); + if(uid.startsWith("urn:uuid:") || (opfSchemeAttr != null && opfSchemeAttr.toLowerCase().equals("uuid"))) { + try { + UUID.fromString(uid.replaceAll("urn:uuid:", "")); + } catch (Throwable t) { + report.message(MessageId.OPF_085, EPUBLocation.create(path, parser.getLineNumber(), parser.getColumnNumber()), uid); + } + } } } } diff --git a/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties index 11707dc02..35ed6c355 100644 --- a/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties +++ b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties @@ -244,6 +244,7 @@ OPF_081=Resource '%1$s' (referenced from an EPUB Dictionary collection) was not OPF_082=Found an EPUB Dictionary collection containing more than one Search Key Map Document. OPF_083=Found an EPUB Dictionary collection containing no Search Key Map Document. OPF_084=Found an EPUB Dictionary collection containing resource '%1$s' which is neither a Search Key Map Document nor an XHTML Content Document. +OPF_085='dc:identifier' value '%1$s' is marked as a UUID, but is an invalid UUID. The UUID muste be composed by 5 dash-separated parts. #Package PKG_001=Validating the EPUB against version %1$s but detected version %2$s.