summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-09-19 11:26:30 +0100
committerMichael Williamson <mike@zwobble.org>2025-09-19 11:26:30 +0100
commita929dc7164a5acc6a199ee5139d8511f61780350 (patch)
tree4cd8f3232fc0f8acdfa5c19b44ded6c775ea9609 /src
parent98c98549a237be0db4689bf38436a24fc30ac111 (diff)
Disable external file access by default
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/mammoth/DocumentConverter.java8
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtmlOptions.java24
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/MammothTests.java24
3 files changed, 30 insertions, 26 deletions
diff --git a/src/main/java/org/zwobble/mammoth/DocumentConverter.java b/src/main/java/org/zwobble/mammoth/DocumentConverter.java
index c7dca20..2d4ee4a 100644
--- a/src/main/java/org/zwobble/mammoth/DocumentConverter.java
+++ b/src/main/java/org/zwobble/mammoth/DocumentConverter.java
@@ -62,11 +62,11 @@ public class DocumentConverter {
/**
* Source documents may reference files outside of the source document.
- * Call this to disable access to any such external files during the conversion process.
- * This is highly recommended when converting untrusted user input.
+ * Access to any such external files is disabled by default.
+ * Call this to enable access when converting trusted source documents.
*/
- public DocumentConverter disableExternalFileAccess() {
- return new DocumentConverter(options.disableExternalFileAccess());
+ public DocumentConverter enableExternalFileAccess() {
+ return new DocumentConverter(options.enableExternalFileAccess());
}
/**
diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtmlOptions.java b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtmlOptions.java
index d12bbd4..706eec4 100644
--- a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtmlOptions.java
+++ b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtmlOptions.java
@@ -31,7 +31,7 @@ public class DocumentToHtmlOptions {
private final StyleMap embeddedStyleMap;
private final boolean disableDefaultStyleMap;
private final boolean disableEmbeddedStyleMap;
- private final boolean disableExternalFileAccess;
+ private final boolean enableExternalFileAccess;
private final InternalImageConverter imageConverter;
public DocumentToHtmlOptions(
@@ -41,7 +41,7 @@ public class DocumentToHtmlOptions {
StyleMap embeddedStyleMap,
boolean disableDefaultStyleMap,
boolean disableEmbeddedStyleMap,
- boolean disableExternalFileAccess,
+ boolean enableExternalFileAccess,
InternalImageConverter imageConverter
) {
this.idPrefix = idPrefix;
@@ -50,7 +50,7 @@ public class DocumentToHtmlOptions {
this.embeddedStyleMap = embeddedStyleMap;
this.disableDefaultStyleMap = disableDefaultStyleMap;
this.disableEmbeddedStyleMap = disableEmbeddedStyleMap;
- this.disableExternalFileAccess = disableExternalFileAccess;
+ this.enableExternalFileAccess = enableExternalFileAccess;
this.imageConverter = imageConverter;
}
@@ -62,7 +62,7 @@ public class DocumentToHtmlOptions {
embeddedStyleMap,
disableDefaultStyleMap,
disableEmbeddedStyleMap,
- disableExternalFileAccess,
+ enableExternalFileAccess,
imageConverter
);
}
@@ -75,7 +75,7 @@ public class DocumentToHtmlOptions {
embeddedStyleMap,
disableDefaultStyleMap,
disableEmbeddedStyleMap,
- disableExternalFileAccess,
+ enableExternalFileAccess,
imageConverter
);
}
@@ -92,7 +92,7 @@ public class DocumentToHtmlOptions {
embeddedStyleMap,
disableDefaultStyleMap,
disableEmbeddedStyleMap,
- disableExternalFileAccess,
+ enableExternalFileAccess,
imageConverter
);
}
@@ -105,7 +105,7 @@ public class DocumentToHtmlOptions {
embeddedStyleMap,
true,
disableEmbeddedStyleMap,
- disableExternalFileAccess,
+ enableExternalFileAccess,
imageConverter
);
}
@@ -118,12 +118,12 @@ public class DocumentToHtmlOptions {
embeddedStyleMap,
disableDefaultStyleMap,
true,
- disableExternalFileAccess,
+ enableExternalFileAccess,
imageConverter
);
}
- public DocumentToHtmlOptions disableExternalFileAccess() {
+ public DocumentToHtmlOptions enableExternalFileAccess() {
return new DocumentToHtmlOptions(
idPrefix,
preserveEmptyParagraphs,
@@ -144,7 +144,7 @@ public class DocumentToHtmlOptions {
embeddedStyleMap,
disableDefaultStyleMap,
disableEmbeddedStyleMap,
- disableExternalFileAccess,
+ enableExternalFileAccess,
imageConverter
);
}
@@ -157,7 +157,7 @@ public class DocumentToHtmlOptions {
embeddedStyleMap,
disableDefaultStyleMap,
disableEmbeddedStyleMap,
- disableExternalFileAccess,
+ enableExternalFileAccess,
InternalImageConverter.imgElement(imageConverter)
);
}
@@ -183,7 +183,7 @@ public class DocumentToHtmlOptions {
}
public boolean externalFileAccess() {
- return !this.disableExternalFileAccess;
+ return this.enableExternalFileAccess;
}
public InternalImageConverter imageConverter() {
diff --git a/src/test/java/org/zwobble/mammoth/tests/MammothTests.java b/src/test/java/org/zwobble/mammoth/tests/MammothTests.java
index a072185..9058162 100644
--- a/src/test/java/org/zwobble/mammoth/tests/MammothTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/MammothTests.java
@@ -89,14 +89,16 @@ public class MammothTests {
}
@Test
- public void imagesStoredOutsideOfDocumentAreIncludedInOutput() throws IOException {
+ public void whenExternalFileAccessIsEnabledThenImagesStoredOutsideOfDocumentAreIncludedInOutput() throws IOException {
Path tempDirectory = Files.createTempDirectory("mammoth-");
try {
Path documentPath = tempDirectory.resolve("external-picture.docx");
Files.copy(TestData.file("external-picture.docx").toPath(), documentPath);
Files.copy(TestData.file("tiny-picture.png").toPath(), tempDirectory.resolve("tiny-picture.png"));
assertThat(
- new DocumentConverter().convertToHtml(documentPath.toFile()),
+ new DocumentConverter()
+ .enableExternalFileAccess()
+ .convertToHtml(documentPath.toFile()),
isSuccess("<p><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAOvgAADr4B6kKxwAAAABNJREFUKFNj/M+ADzDhlWUYqdIAQSwBE8U+X40AAAAASUVORK5CYII=\" /></p>"));
} finally {
tempDirectory.toFile().delete();
@@ -104,13 +106,15 @@ public class MammothTests {
}
@Test
- public void warnIfDocumentHasImagesStoredOutsideOfDocumentWhenPathOfDocumentIsUnknown() throws IOException {
+ public void whenExternalFileAccessIsEnabledThenWarnIfDocumentHasImagesStoredOutsideOfDocumentWhenPathOfDocumentIsUnknown() throws IOException {
Path tempDirectory = Files.createTempDirectory("mammoth-");
try {
Path documentPath = tempDirectory.resolve("external-picture.docx");
Files.copy(TestData.file("external-picture.docx").toPath(), documentPath);
assertThat(
- new DocumentConverter().convertToHtml(documentPath.toUri().toURL().openStream()),
+ new DocumentConverter()
+ .enableExternalFileAccess()
+ .convertToHtml(documentPath.toUri().toURL().openStream()),
allOf(
hasProperty("value", equalTo("")),
hasProperty("warnings", contains(
@@ -121,16 +125,14 @@ public class MammothTests {
}
@Test
- public void warnIfDocumentHasImagesStoredOutsideOfDocumentWhenExternalFileAccessIsDisabled() throws IOException {
+ public void givenExternalFileAccessIsDisabledByDefaultThenWarnIfDocumentHasImagesStoredOutsideOfDocument() throws IOException {
Path tempDirectory = Files.createTempDirectory("mammoth-");
try {
Path documentPath = tempDirectory.resolve("external-picture.docx");
Files.copy(TestData.file("external-picture.docx").toPath(), documentPath);
Files.copy(TestData.file("tiny-picture.png").toPath(), tempDirectory.resolve("tiny-picture.png"));
assertThat(
- new DocumentConverter()
- .disableExternalFileAccess()
- .convertToHtml(documentPath.toFile()),
+ new DocumentConverter().convertToHtml(documentPath.toFile()),
allOf(
hasProperty("value", equalTo("")),
hasProperty("warnings", contains(
@@ -144,13 +146,15 @@ public class MammothTests {
}
@Test
- public void warnIfImagesStoredOutsideOfDocumentAreNotFound() throws IOException {
+ public void whenExternalFileAccessIsEnabledWarnIfImagesStoredOutsideOfDocumentAreNotFound() throws IOException {
Path tempDirectory = Files.createTempDirectory("mammoth-");
try {
Path documentPath = tempDirectory.resolve("external-picture.docx");
Files.copy(TestData.file("external-picture.docx").toPath(), documentPath);
assertThat(
- new DocumentConverter().convertToHtml(documentPath.toFile()),
+ new DocumentConverter()
+ .enableExternalFileAccess()
+ .convertToHtml(documentPath.toFile()),
allOf(
hasProperty("value", equalTo("")),
hasProperty("warnings", contains(