diff --git a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/ImageReaderBase.java b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/ImageReaderBase.java
index bae96a63..42179673 100644
--- a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/ImageReaderBase.java
+++ b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/ImageReaderBase.java
@@ -354,6 +354,10 @@ public abstract class ImageReaderBase extends ImageReader {
Thread.currentThread().interrupt();
}
catch (InvocationTargetException e) {
+ if (e.getCause() instanceof RuntimeException) {
+ throw (RuntimeException) e.getCause();
+ }
+
throw new RuntimeException(e);
}
}
diff --git a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java
index 58177a46..e17376dc 100755
--- a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java
+++ b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java
@@ -57,6 +57,9 @@ public final class IIOUtil {
/**
* Creates an {@code OutputStream} adapter that writes to an underlying {@code ImageOutputStream}.
+ *
+ * Note: The adapter is buffered, and MUST be properly flushed/closed after use,
+ * otherwise data may be lost.
*
* @param pStream the stream to write to.
* @return an {@code OutputSteam} writing to {@code pStream}.
diff --git a/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java b/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java
index 37f0566b..cf15f1f0 100644
--- a/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java
+++ b/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTestCase.java
@@ -1441,6 +1441,72 @@ public abstract class ImageReaderAbstractTestCase {
}
}
+ @Test
+ public void testNotBadCaching() throws IOException {
+ T reader = createReader();
+ TestData data = getTestData().get(0);
+ reader.setInput(data.getInputStream());
+
+ BufferedImage one = reader.read(0);
+ BufferedImage two = reader.read(0);
+
+ assertNotSame("Multiple reads return same (mutable) image", one, two);
+
+ Graphics2D g = one.createGraphics();
+ try {
+ g.setColor(Color.WHITE);
+ g.setXORMode(Color.BLACK);
+ g.fillRect(0, 0, one.getWidth(), one.getHeight());
+ }
+ finally {
+ g.dispose();
+ }
+
+ assertTrue(one.getRGB(0, 0) != two.getRGB(0, 0));
+ }
+
+ @Test
+ public void testNotBadCachingThumbnails() throws IOException {
+ T reader = createReader();
+
+ if (reader.readerSupportsThumbnails()) {
+ for (TestData data : getTestData()) {
+ reader.setInput(data.getInputStream());
+
+ int images = reader.getNumImages(true);
+ for (int i = 0; i < images; i++) {
+ int thumbnails = reader.getNumThumbnails(0);
+
+ for (int j = 0; j < thumbnails; j++) {
+ BufferedImage one = reader.readThumbnail(i, j);
+ BufferedImage two = reader.readThumbnail(i, j);
+
+ assertNotSame("Multiple reads return same (mutable) image", one, two);
+
+ Graphics2D g = one.createGraphics();
+ try {
+ g.setColor(Color.WHITE);
+ g.setXORMode(Color.BLACK);
+ g.fillRect(0, 0, one.getWidth(), one.getHeight());
+ }
+ finally {
+ g.dispose();
+ }
+
+ assertTrue(one.getRGB(0, 0) != two.getRGB(0, 0));
+ }
+
+ if (thumbnails > 0) {
+ // We've tested thumbnails, let's get out of here
+ return;
+ }
+ }
+ }
+
+ fail("No thumbnails tested for reader that supports thumbnails.");
+ }
+ }
+
@Ignore("TODO: Implement")
@Test
public void testSetDestinationBands() throws IOException {
diff --git a/imageio/imageio-ico/src/main/java/com/twelvemonkeys/imageio/plugins/ico/DIBImageReader.java b/imageio/imageio-ico/src/main/java/com/twelvemonkeys/imageio/plugins/ico/DIBImageReader.java
index a39ad143..11be7c15 100644
--- a/imageio/imageio-ico/src/main/java/com/twelvemonkeys/imageio/plugins/ico/DIBImageReader.java
+++ b/imageio/imageio-ico/src/main/java/com/twelvemonkeys/imageio/plugins/ico/DIBImageReader.java
@@ -63,7 +63,7 @@ import java.util.List;
* @see ICO file format (Wikipedia)
*/
// SEE http://en.wikipedia.org/wiki/ICO_(icon_image_file_format)
-// TODO: Decide wether DirectoryEntry or DIBHeader should be primary source for color count/bit count
+// TODO: Decide whether DirectoryEntry or DIBHeader should be primary source for color count/bit count
// TODO: Support loading icons from DLLs, see
// MSDN
// Known issue: 256x256 PNG encoded icons does not have IndexColorModel even if stated in DirectoryEntry (seem impossible as the PNGs are all true color)
diff --git a/imageio/imageio-ico/src/test/java/com/twelvemonkeys/imageio/plugins/ico/CURImageReaderTestCase.java b/imageio/imageio-ico/src/test/java/com/twelvemonkeys/imageio/plugins/ico/CURImageReaderTestCase.java
index 305b6576..8a6fc296 100755
--- a/imageio/imageio-ico/src/test/java/com/twelvemonkeys/imageio/plugins/ico/CURImageReaderTestCase.java
+++ b/imageio/imageio-ico/src/test/java/com/twelvemonkeys/imageio/plugins/ico/CURImageReaderTestCase.java
@@ -1,6 +1,7 @@
package com.twelvemonkeys.imageio.plugins.ico;
import com.twelvemonkeys.imageio.util.ImageReaderAbstractTestCase;
+import org.junit.Ignore;
import org.junit.Test;
import javax.imageio.ImageReadParam;
@@ -110,4 +111,11 @@ public class CURImageReaderTestCase extends ImageReaderAbstractTestCase getMIMETypes() {
return Arrays.asList("image/vnd.microsoft.icon", "image/ico", "image/x-icon");
}
+
+ @Test
+ @Ignore("Known issue")
+ @Override
+ public void testNotBadCaching() throws IOException {
+ super.testNotBadCaching();
+ }
}
\ No newline at end of file
diff --git a/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTestCase.java b/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTestCase.java
index 07cb48e6..69da521b 100644
--- a/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTestCase.java
+++ b/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTestCase.java
@@ -4,6 +4,7 @@ import com.sun.imageio.plugins.jpeg.JPEGImageReader;
import com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi;
import com.twelvemonkeys.imageio.util.ImageReaderAbstractTestCase;
import com.twelvemonkeys.lang.SystemUtil;
+import org.junit.Ignore;
import org.junit.Test;
import javax.imageio.IIOException;
@@ -93,13 +94,16 @@ public class JPEGImageReaderTestCase extends ImageReaderAbstractTestCase