--- old/src/java.desktop/share/classes/javax/imageio/ImageIO.java 2016-03-15 23:45:16.305549000 +0530 +++ new/src/java.desktop/share/classes/javax/imageio/ImageIO.java 2016-03-15 23:45:15.701247000 +0530 @@ -1352,6 +1352,11 @@ } ImageInputStream stream = createImageInputStream(input); + + if (stream == null) { + throw new IIOException("Can't create an ImageInputStream!"); + } + BufferedImage bi = read(stream); if (bi == null) { stream.close(); @@ -1398,6 +1403,11 @@ throw new IIOException("Can't get input stream from URL!", e); } ImageInputStream stream = createImageInputStream(istream); + + if (stream == null) { + throw new IIOException("Can't create an ImageInputStream!"); + } + BufferedImage bi; try { bi = read(stream); @@ -1535,6 +1545,10 @@ throw new IIOException("Can't create output stream!", e); } + if (stream == null) { + throw new IIOException("Can't create an ImageOutputStream!"); + } + try { return doWrite(im, writer, stream); } finally { @@ -1577,6 +1591,10 @@ throw new IIOException("Can't create output stream!", e); } + if (stream == null) { + throw new IIOException("Can't create an ImageOutputStream!"); + } + try { return doWrite(im, getWriter(im, formatName), stream); } finally { --- /dev/null 2016-03-03 18:49:30.871275000 +0530 +++ new/test/javax/imageio/stream/NullStreamCheckTest.java 2016-03-15 23:45:17.173983000 +0530 @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8044289 + * @summary Test verifies that when createImageInputStream() or + * createImageOutputStream() returns null while read or write, + * are we doing null check properly. + * @run main NullStreamCheckTest + */ + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.MalformedURLException; +import java.net.URL; +import javax.imageio.ImageIO; +import javax.imageio.spi.IIORegistry; +import javax.imageio.spi.ImageInputStreamSpi; +import javax.imageio.spi.ImageOutputStreamSpi; + +public class NullStreamCheckTest { + + // get ImageIORegistry default instance. + private static final IIORegistry localRegistry = IIORegistry. + getDefaultInstance(); + // stream variables needed for input and output. + static LocalOutputStream outputStream = new LocalOutputStream(); + static LocalInputStream inputStream = new LocalInputStream(); + + static final int width = 50, height = 50; + + // input and output BufferedImage needed while read and write. + static BufferedImage inputImage = new BufferedImage(width, height, + BufferedImage.TYPE_INT_ARGB); + static BufferedImage outputImage = new BufferedImage(width, height, + BufferedImage.TYPE_INT_ARGB); + + // creates test file needed for read and write in local directory. + private static File createTestFile(String name) { + String fileName = name; + String sep = System.getProperty("file.separator"); + String dir = System.getProperty("test.src", "."); + String filePath = dir+sep+fileName; + File testFile = new File(filePath); + return testFile; + } + + /* if we catch expected IOException message return + * false otherwise return true. + */ + private static boolean verifyOutputExceptionMessage(IOException ex) { + String message = ex.getMessage(); + return (!message.equals("Can't create an ImageOutputStream!")); + } + + /* if we catch expected IOException message return + * false otherwise return true. + */ + private static boolean verifyInputExceptionMessage(IOException ex) { + String message = ex.getMessage(); + return (!message.equals("Can't create an ImageInputStream!")); + } + + private static void verifyFileWrite() throws IOException { + File outputTestFile = createTestFile("outputTestFile.png"); + try { + ImageIO.write(inputImage, "png", outputTestFile); + } catch (IOException ex) { + if (verifyOutputExceptionMessage(ex)) + throw ex; + } finally { + outputTestFile.delete(); + } + } + + private static void verifyStreamWrite() throws IOException { + try { + ImageIO.write(inputImage, "png", outputStream); + } catch (IOException ex) { + if (verifyOutputExceptionMessage(ex)) + throw ex; + } finally { + try { + outputStream.close(); + } catch (IOException ex) { + throw ex; + } + } + } + + private static void verifyFileRead() throws IOException { + File inputTestFile = createTestFile("inputTestFile.png"); + try { + outputImage = ImageIO.read(inputTestFile); + } catch (IOException ex) { + if (verifyInputExceptionMessage(ex)) + throw ex; + } + } + + private static void verifyStreamRead() throws IOException { + try { + ImageIO.read(inputStream); + } catch (IOException ex) { + if (verifyInputExceptionMessage(ex)) + throw ex; + } finally { + try { + inputStream.close(); + } catch (IOException ex) { + throw ex; + } + } + } + + private static void verifyUrlRead() throws IOException { + URL url = null; + File inputTestFile = createTestFile("inputTestFile.png"); + try { + url = inputTestFile.toURI().toURL(); + } catch (MalformedURLException ex) { + throw ex; + } + try { + ImageIO.read(url); + } catch (IOException ex) { + if (verifyInputExceptionMessage(ex)) + throw ex; + } + } + + public static void main(String[] args) throws IOException, + MalformedURLException { + + /* deregister ImageOutputStreamSpi so that we creatImageOutputStream + * returns null while writing. + */ + localRegistry.deregisterAll(ImageOutputStreamSpi.class); + /* verify possible ImageIO.write() scenraio's for null stream output + * from createImageOutputStream() API in ImageIO class. + */ + verifyFileWrite(); + verifyStreamWrite(); + + /* deregister ImageInputStreamSpi so that we creatImageInputStream + * returns null while reading. + */ + localRegistry.deregisterAll(ImageInputStreamSpi.class); + /* verify possible ImageIO.read() scenraio's for null stream output + * from createImageInputStream API in ImageIO class. + */ + verifyFileRead(); + verifyStreamRead(); + verifyUrlRead(); + } + + static class LocalOutputStream extends OutputStream { + + @Override + public void write(int i) throws IOException { + } + } + + static class LocalInputStream extends InputStream { + + @Override + public int read() throws IOException { + return 0; + } + } +} Binary files /dev/null and new/test/javax/imageio/stream/inputTestFile.png differ