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
-
-
-
-
-
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'