diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFChecker30.java b/src/main/java/com/adobe/epubcheck/opf/OPFChecker30.java index f5bcbeede..38427d3cb 100644 --- a/src/main/java/com/adobe/epubcheck/opf/OPFChecker30.java +++ b/src/main/java/com/adobe/epubcheck/opf/OPFChecker30.java @@ -85,6 +85,12 @@ protected boolean checkContent() @Override protected void checkItem(OPFItem item, OPFHandler opfHandler) { + // Items with `data:` URLs are not allowed in EPUB 3 + if (item.hasDataURL()) + { + report.message(MessageId.RSC_029, item.getLocation()); + return; + } if (item.getPath().startsWith("META-INF/")) { report.message(MessageId.PKG_025, item.getLocation()); @@ -182,10 +188,9 @@ else if (!overlayTextChecker.isCorrectOverlay(docURL, mo)) @Override protected void checkSpineItem(OPFItem item, OPFHandler opfHandler) { - // Items with `data:` URLs are not allowed in the spine + // Items with `data:` URLs are not allowed and reported earlier if (item.hasDataURL()) { - report.message(MessageId.RSC_029, item.getLocation()); return; } diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFHandler30.java b/src/main/java/com/adobe/epubcheck/opf/OPFHandler30.java index 60208082b..018f753db 100644 --- a/src/main/java/com/adobe/epubcheck/opf/OPFHandler30.java +++ b/src/main/java/com/adobe/epubcheck/opf/OPFHandler30.java @@ -393,12 +393,17 @@ private void processLink() { XMLElement e = currentElement(); + // check the 'href' URL + // href presence is checked by schema String href = e.getAttribute("href"); - if (href != null) - { // href presence is checked by schema - - // check the 'href' URL - URL url = checkURL(href); + URL url = checkURL(href); + if (url != null) + { + // Data URLs are not allowed on `link` elements + if ("data".equals(url.scheme())) { + report.message(MessageId.RSC_029, location()); + return; + } if (context.isRemote(url)) { report.info(path, FeatureEnum.REFERENCE, href); diff --git a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/content_001.xhtml b/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/content_001.xhtml deleted file mode 100644 index 6d1175045..000000000 --- a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/content_001.xhtml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - Minimal EPUB - - - the whale - - diff --git a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/image.jpeg b/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/image.jpeg deleted file mode 100644 index ff336a51f..000000000 Binary files a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/image.jpeg and /dev/null differ diff --git a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/nav.xhtml b/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/nav.xhtml deleted file mode 100644 index 240745e63..000000000 --- a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/nav.xhtml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - Minimal Nav - - - - - diff --git a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/package.opf b/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/package.opf deleted file mode 100644 index 2a1ff0420..000000000 --- a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/EPUB/package.opf +++ /dev/null @@ -1,45 +0,0 @@ - - - - Minimal EPUB 3.0 - en - NOID - 2017-06-14T00:00:01Z - - - - - - - - - - - diff --git a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/META-INF/container.xml b/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/META-INF/container.xml deleted file mode 100644 index 318782179..000000000 --- a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/META-INF/container.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/mimetype b/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/mimetype deleted file mode 100644 index 57ef03f24..000000000 --- a/src/test/resources/epub3/03-resources/files/data-url-in-html-img-foreign-manifest-fallback-valid/mimetype +++ /dev/null @@ -1 +0,0 @@ -application/epub+zip \ No newline at end of file diff --git a/src/test/resources/epub3/03-resources/files/data-url-in-manifest-item-valid.opf b/src/test/resources/epub3/03-resources/files/data-url-in-manifest-item-error.opf similarity index 100% rename from src/test/resources/epub3/03-resources/files/data-url-in-manifest-item-valid.opf rename to src/test/resources/epub3/03-resources/files/data-url-in-manifest-item-error.opf diff --git a/src/test/resources/epub3/03-resources/files/data-url-in-package-link-error.opf b/src/test/resources/epub3/03-resources/files/data-url-in-package-link-error.opf new file mode 100644 index 000000000..298833381 --- /dev/null +++ b/src/test/resources/epub3/03-resources/files/data-url-in-package-link-error.opf @@ -0,0 +1,17 @@ + + + + Minimal EPUB 3.0 + en + NOID + 2017-06-14T00:00:01Z + + + + + + + + + + diff --git a/src/test/resources/epub3/03-resources/resources.feature b/src/test/resources/epub3/03-resources/resources.feature index c9e49aa70..51a20fb00 100644 --- a/src/test/resources/epub3/03-resources/resources.feature +++ b/src/test/resources/epub3/03-resources/resources.feature @@ -493,16 +493,23 @@ ## 3.7 Data URLs @spec @xref:sec-data-urls - Scenario: Allow a data URL in a manifest item not in the spine - When checking file 'data-url-in-manifest-item-valid.opf' - Then no errors or warnings are reported + Scenario: Report a data URL in a manifest item href (not in the spine) + When checking file 'data-url-in-manifest-item-error.opf' + Then error RSC-029 is reported + And no other errors or warnings are reported @spec @xref:sec-data-urls - Scenario: Report a data URL in a manifest item referenced in the spine + Scenario: Report a data URL in a manifest item href (referenced in the spine) When checking file 'data-url-in-manifest-item-in-spine-error.opf' Then error RSC-029 is reported And no other errors or warnings are reported + @spec @xref:sec-data-urls + Scenario: Report a data URL in a package link href + When checking file 'data-url-in-package-link-error.opf' + Then error RSC-029 is reported + And no other errors or warnings are reported + @spec @xref:sec-data-urls Scenario: Report a data URL in the `href` attribute of an HTML `a` element When checking file 'data-url-in-html-a-href-error.xhtml' @@ -536,11 +543,6 @@ When checking EPUB 'data-url-in-html-img-foreign-intrinsic-fallback-valid' And no errors or warnings are reported - @spec @xref:sec-data-urls - Scenario: Allow a data URL defining a foreign resource with a manifest fallback (in an HTML `img` element) - When checking EPUB 'data-url-in-html-img-foreign-manifest-fallback-valid' - And no errors or warnings are reported - @spec @xref:sec-data-urls Scenario: Report a data URL defining a foreign resource with no fallback (in an HTML `img` element) When checking EPUB 'data-url-in-html-img-foreign-no-fallback-error'