diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-09-19 14:16:21 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-09-19 14:16:36 +0100 |
| commit | 5391908ab339c9431d3f87fe201cf75e7ceecec0 (patch) | |
| tree | 39c9076737ee5a8687133cb4f8516485ea673222 | |
| parent | af15ea0632707e4f0b2c765dbbbb3c3d997c1f9f (diff) | |
Update tests for disabling external file access by default
| -rw-r--r-- | Mammoth.Tests/DocumentConverterTests.cs | 24 | ||||
| -rw-r--r-- | Mammoth/DocumentConverter.cs | 24 |
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; } |
