aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-10-02 12:22:33 +0100
committerMichael Williamson <mike@zwobble.org>2016-10-02 12:22:33 +0100
commita598ea5e130179d702da0a9305c54f71e594e8bb (patch)
treeef780d734a59a64fd1166df0545f772c0ce731bd
parent478405aaa3bb86bb85e8d77ba41ac6b4612cb3df (diff)
Ignore v:imagedata elements without relationship ID with warning
-rw-r--r--NEWS2
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java11
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java9
3 files changed, 18 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 51eeae0..e4bfacc 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@
* Use alt text title as alt text for images when the alt text description is
blank or missing.
+* Ignore v:imagedata elements without relationship ID with warning.
+
# 0.0.4
* Add support for comments.
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java
index 5f93c4a..e4c5b5f 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java
@@ -381,10 +381,13 @@ public class BodyXmlReader {
}
private ReadResult readImagedata(XmlElement element) {
- Optional<String> title = element.getAttributeOrNone("o:title");
- String relationshipId = element.getAttribute("r:id");
- String imagePath = relationshipIdToDocxPath(relationshipId);
- return readImage(imagePath, title, () -> DocxFiles.getInputStream(file, imagePath));
+ return element.getAttributeOrNone("r:id")
+ .map(relationshipId -> {
+ Optional<String> title = element.getAttributeOrNone("o:title");
+ String imagePath = relationshipIdToDocxPath(relationshipId);
+ return readImage(imagePath, title, () -> DocxFiles.getInputStream(file, imagePath));
+ })
+ .orElse(ReadResult.emptyWithWarning("A v:imagedata element without a relationship ID was ignored"));
}
private ReadResult readInline(XmlElement element) {
diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
index 0b1857e..2124c67 100644
--- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
@@ -560,6 +560,15 @@ public class BodyXmlTests {
}
@Test
+ public void whenImagedataElementHasNoRelationshipIdThenItIsIgnoredWithError() throws IOException {
+ XmlElement element = element("v:imagedata");
+
+ assertThat(
+ readAll(bodyReader(), element),
+ isInternalResult(equalTo(list()), list("A v:imagedata element without a relationship ID was ignored")));
+ }
+
+ @Test
public void canReadInlinePictures() throws IOException {
assertCanReadEmbeddedImage(image ->
inlineImageXml(embeddedBlipXml(image.relationshipId), image.altText));