import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Base64;
import javax.imageio.ImageIO;

public class PngReaderNegativeArraySizeIssue {

	// PNG image test case (encoded as base64 to avoid attaching files)
	private static String inputImageBase64 = "iVBORw0KGgoAAAANSUhEUn7///4" +
	"AAAABCAMAAABEpIrGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAA" +
	"AAA9QTFRFZszM////AAAAM5lmmf/MPkyvFQAAAGFJREFUeNrckzEOwCAMA5OY/7+5NBQ" +
	"J1DphYaA3sPgkCwtEE0TVAm7BCkfMBaHgp4JvFwjPulSoITAabwHwk1a0PBB6TSBM+bc" +
	"w5ERIlkQiTEPuqTj2ydWbUWzl8yZcAgwA0mYDNbDXy5oAAAo=";

	public static void main(String[] args) throws java.io.IOException {
		// Convert test case into input stream
		byte[] inputBytes = Base64.getDecoder().decode(inputImageBase64);
		InputStream in = new ByteArrayInputStream(inputBytes);

		// Attempt to read PNG
		ImageIO.read(in); // Throws java.lang.NegativeArraySizeException!
	}
}
