From a598ea5e130179d702da0a9305c54f71e594e8bb Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 2 Oct 2016 12:22:33 +0100 Subject: Ignore v:imagedata elements without relationship ID with warning --- NEWS | 2 ++ .../java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java | 11 +++++++---- .../java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java | 9 +++++++++ 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 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 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 @@ -559,6 +559,15 @@ public class BodyXmlTests { element("v:imagedata", map("r:id", image.relationshipId, "o:title", image.altText))); } + @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 -> -- cgit v1.2.3