aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-09-19 14:16:21 +0100
committerMichael Williamson <mike@zwobble.org>2025-09-19 14:16:36 +0100
commit5391908ab339c9431d3f87fe201cf75e7ceecec0 (patch)
tree39c9076737ee5a8687133cb4f8516485ea673222
parentaf15ea0632707e4f0b2c765dbbbb3c3d997c1f9f (diff)
Update tests for disabling external file access by default
-rw-r--r--Mammoth.Tests/DocumentConverterTests.cs24
-rw-r--r--Mammoth/DocumentConverter.cs24
2 files changed, 34 insertions, 14 deletions
diff --git a/Mammoth.Tests/DocumentConverterTests.cs b/Mammoth.Tests/DocumentConverterTests.cs
index c61ac04..607d27f 100644
--- a/Mammoth.Tests/DocumentConverterTests.cs
+++ b/Mammoth.Tests/DocumentConverterTests.cs
@@ -69,23 +69,37 @@ namespace Mammoth.Tests {
}
[Fact]
- public void ImagesStoredOutsideOfDocumentAreIncludedInOutput() {
+ public void WhenExternalFileAccessIsEnabledThenImagesStoredOutsideOfDocumentAreIncludedInOutput() {
AssertSuccessfulConversion(
- ConvertToHtml("external-picture.docx"),
+ ConvertToHtml("external-picture.docx", mammoth => mammoth.EnableExternalFileAccess()),
"<p><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAOvgAADr4B6kKxwAAAABNJREFUKFNj/M+ADzDhlWUYqdIAQSwBE8U+X40AAAAASUVORK5CYII=\" /></p>");
}
[Fact]
- public void WarnIfDocumentHasImagesStoredOutsideOfDocumentWhenPathOfDocumentIsUnknown() {
+ public void WhenExternalFileAccessIsEnabledThenWarnIfDocumentHasImagesStoredOutsideOfDocumentWhenPathOfDocumentIsUnknown() {
using (var file = File.OpenRead(TestFilePath("external-picture.docx"))) {
- var result = new DocumentConverter().ConvertToHtml(file);
+ var result = new DocumentConverter()
+ .EnableExternalFileAccess()
+ .ConvertToHtml(file);
+
Assert.Equal("", result.Value);
Assert.Equal(new[]{"could not open external image 'tiny-picture.png': path of document is unknown, but is required for relative URI"}, result.Warnings);
}
}
[Fact]
- public void WarnIfImagesStoredOutsideOfDocumentAreNotFound() {
+ public void GivenExternalFileAccessIsDisabledByDefaultThenWarnIfDocumentHasImagesStoredOutsideOfDocument()
+ {
+ using (var file = File.OpenRead(TestFilePath("external-picture.docx"))) {
+ var result = new DocumentConverter().ConvertToHtml(file);
+
+ Assert.Equal("", result.Value);
+ Assert.Equal(new[]{"could not open external image 'tiny-picture.png': external file access is disabled"}, result.Warnings);
+ }
+ }
+
+ [Fact]
+ public void WhenExternalFileAccessIsEnabledThenWarnIfImagesStoredOutsideOfDocumentAreNotFound() {
var tempDirectory = Path.Combine(Path.GetTempPath(), "mammoth-" + Guid.NewGuid());
Directory.CreateDirectory(tempDirectory);
try {
diff --git a/Mammoth/DocumentConverter.cs b/Mammoth/DocumentConverter.cs
index 4995e54..1866e87 100644
--- a/Mammoth/DocumentConverter.cs
+++ b/Mammoth/DocumentConverter.cs
@@ -31,34 +31,40 @@ namespace Mammoth {
public DocumentConverter DisableDefaultStyleMap() {
return new DocumentConverter(options.disableDefaultStyleMap());
}
-
+
public DocumentConverter DisableEmbeddedStyleMap() {
return new DocumentConverter(options.disableEmbeddedStyleMap());
}
-
- public DocumentConverter ImageConverter(Func<IImage, IDictionary<string, string>> imageConverter) {
+
+ public DocumentConverter EnableExternalFileAccess()
+ {
+ return new DocumentConverter(options.enableExternalFileAccess());
+ }
+
+ public DocumentConverter ImageConverter(Func<IImage, IDictionary<string, string>> imageConverter)
+ {
return new DocumentConverter(options.imageConverter(new ImageConverterShim(imageConverter)));
}
-
+
internal class ImageConverterShim : Mammoth.Couscous.org.zwobble.mammoth.images.ImageConverter__ImgElement {
private readonly Func<IImage, IDictionary<string, string>> func;
-
+
internal ImageConverterShim(Func<IImage, IDictionary<string, string>> func) {
this.func = func;
}
-
+
public Mammoth.Couscous.java.util.Map<string, string> convert(Mammoth.Couscous.org.zwobble.mammoth.images.Image image) {
return ToJava.DictionaryToMap(func(new Image(image)));
}
}
-
+
internal class Image : IImage {
private readonly Mammoth.Couscous.org.zwobble.mammoth.images.Image image;
-
+
internal Image(Mammoth.Couscous.org.zwobble.mammoth.images.Image image) {
this.image = image;
}
-
+
public string AltText { get { return image.getAltText().orElse(null); } }
public string ContentType { get { return image.getContentType(); } }
public Stream GetStream() { return image.getInputStream().Stream; }