Hello all

This is (as far as I remember) my first post on this mailing list. I would like to know if the Java2D team has a JIRA bug tracker for reporting issues, like the JavaFX team? Anyway there is a first issue I would like to submit:

javax.imageio.stream.FileCacheImageOutputStream throws a NullPointerException if the close() method is invoked twice. This behaviour does not comply with the java.io.Closeable specification, which said "If the stream is already closed then invoking this method has no effect.". The NullPointerException is caused by the close() method setting the 'cache' field to null, while the first line of the 'close()' method does not verify if the cache is already null.

A similar issue apply to FileCacheImageInputStream, except that in this case the code explicitly throws an IOException if the stream is already closed. Again this is in contradiction with the Closeable specification (note that nothing in the ImageInputStream specification said that the close() method should behave that way). So I leave the FileCacheImageInputStream.close() issue as an open question for now...

Proposed patch attached for FileImageOutputStream.

    Regards,

        Martin

diff -r cd195e5d2c07 
src/share/classes/javax/imageio/stream/FileCacheImageOutputStream.java
--- a/src/share/classes/javax/imageio/stream/FileCacheImageOutputStream.java    
Fri Jun 08 12:44:30 2012 -0700
+++ b/src/share/classes/javax/imageio/stream/FileCacheImageOutputStream.java    
Thu Jun 14 18:35:30 2012 +0200
@@ -222,6 +222,9 @@
      * @exception IOException if an error occurs.
      */
     public void close() throws IOException {
+        if (cache == null) {
+            return; // Stream already closed.
+        }
         maxStreamPos = cache.length();
 
         seek(maxStreamPos);

Reply via email to