diff --git a/imageio/imageio-batik/pom.xml b/imageio/imageio-batik/pom.xml
index 385f6660..8e162958 100644
--- a/imageio/imageio-batik/pom.xml
+++ b/imageio/imageio-batik/pom.xml
@@ -88,6 +88,6 @@
- 1.9
+ 1.12
diff --git a/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReader.java b/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReader.java
index c55012de..5b776f14 100755
--- a/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReader.java
+++ b/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReader.java
@@ -80,6 +80,7 @@ import java.util.Map;
*/
public class SVGImageReader extends ImageReaderBase {
private Rasterizer rasterizer;
+ private boolean allowExternalResources;
/**
* Creates an {@code SVGImageReader}.
@@ -88,6 +89,7 @@ public class SVGImageReader extends ImageReaderBase {
*/
public SVGImageReader(final ImageReaderSpi pProvider) {
super(pProvider);
+ allowExternalResources = true;
}
protected void resetMembers() {
@@ -116,6 +118,9 @@ public class SVGImageReader extends ImageReaderBase {
if (pParam instanceof SVGReadParam) {
SVGReadParam svgParam = (SVGReadParam) pParam;
+ // set the external-resource-resolution preference
+ allowExternalResources = svgParam.shouldAllowExternalResources();
+
// Get the base URI
// This must be done before converting the params to hints
String baseURI = svgParam.getBaseURI();
@@ -641,6 +646,14 @@ public class SVGImageReader extends ImageReaderBase {
public void displayMessage(String message) {
processWarningOccurred(message.replaceAll("[\\r\\n]+", " "));
}
+
+ @Override
+ public ExternalResourceSecurity getExternalResourceSecurity(ParsedURL resourceURL, ParsedURL docURL) {
+ if (allowExternalResources) {
+ return super.getExternalResourceSecurity(resourceURL, docURL);
+ }
+ return new NoLoadExternalResourceSecurity();
+ }
}
}
}
diff --git a/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGReadParam.java b/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGReadParam.java
index 2d5ad4dd..12ec7899 100755
--- a/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGReadParam.java
+++ b/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGReadParam.java
@@ -41,6 +41,12 @@ import java.awt.*;
public class SVGReadParam extends ImageReadParam {
private Paint background;
private String baseURI;
+ private boolean allowExternalResources;
+
+ public SVGReadParam() {
+ super();
+ allowExternalResources = true;
+ }
public Paint getBackgroundColor() {
return background;
@@ -58,6 +64,14 @@ public class SVGReadParam extends ImageReadParam {
baseURI = pBaseURI;
}
+ public void allowExternalResources(boolean bAllow) {
+ allowExternalResources = bAllow;
+ }
+
+ public boolean shouldAllowExternalResources() {
+ return allowExternalResources;
+ }
+
@Override
public boolean canSetSourceRenderSize() {
return true;
diff --git a/imageio/imageio-batik/src/test/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderTest.java b/imageio/imageio-batik/src/test/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderTest.java
index 21c30f3b..9a2c8863 100755
--- a/imageio/imageio-batik/src/test/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderTest.java
+++ b/imageio/imageio-batik/src/test/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderTest.java
@@ -49,7 +49,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
-import java.nio.Buffer;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -67,6 +66,7 @@ import static org.mockito.Mockito.*;
* @version $Id: SVGImageReaderTest.java,v 1.0 Apr 1, 2008 10:39:17 PM haraldk Exp$
*/
public class SVGImageReaderTest extends ImageReaderAbstractTest {
+
private SVGImageReaderSpi provider = new SVGImageReaderSpi();
protected List getTestData() {
@@ -306,4 +306,26 @@ public class SVGImageReaderTest extends ImageReaderAbstractTest
reader.dispose();
}
}
-}
\ No newline at end of file
+
+ @Test(expected = SecurityException.class)
+ public void testDisallowedExternalResources() throws URISyntaxException, IOException {
+ URL resource = getClassLoaderResource("/svg/barChart.svg");
+
+ SVGImageReader reader = createReader();
+
+ TestData data = new TestData(resource, (Dimension) null);
+ try (ImageInputStream stream = data.getInputStream()) {
+ reader.setInput(stream);
+
+ SVGReadParam param = reader.getDefaultReadParam();
+ param.setBaseURI(resource.toURI().toASCIIString());
+ param.allowExternalResources(false);
+ // `reader.read` for `/svg/barChart.svg` should raise
+ // a SecurityException when External Resources are blocked
+ reader.read(0, param);
+ }
+ finally {
+ reader.dispose();
+ }
+ }
+}