Hello! Looking to imageIO.java (if this is bad thread, please redirect me!) when reading images http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/javax/imageio/ImageIO.java#l543 and ending at:
// Perform mark/reset as a defensive measure // even though plug-ins are supposed to take // care of it. boolean canDecode = false; if (stream != null) { stream.mark(); } canDecode = spi.canDecodeInput(input); if (stream != null) { stream.reset(); } return canDecode; I'm wondering, why stream.reset(); is not in finaly block: // Perform mark/reset as a defensive measure // even though plug-ins are supposed to take // care of it. boolean canDecode = false; if (stream != null) { stream.mark(); } try{ canDecode = spi.canDecodeInput(input); } finally { if (stream != null) { stream.reset(); } } return canDecode; Eg png and bmp decoders can are throwing IIOException when header is corrutped. That pretty definitely sure killer of stream mark stacks. You yourselves write : //Perform mark/reset as a defensive measure even though plug-ins are supposed to take care of it. So if densive, then try/finaly please. I did not check if this changed in 9 but if not....Please. This is makig work on custom image plugins, for image formats which just wraps another bmp/png and are expecting corrupted headers preatty hards. J.