diff --git a/src/java.desktop/share/native/libjavajpeg/jpegdecoder.c b/src/java.desktop/share/native/libjavajpeg/jpegdecoder.c index 419c4a94b60cd..61ea804906f1f 100644 --- a/src/java.desktop/share/native/libjavajpeg/jpegdecoder.c +++ b/src/java.desktop/share/native/libjavajpeg/jpegdecoder.c @@ -221,27 +221,27 @@ static void RELEASE_ARRAYS(JNIEnv *env, sun_jpeg_source_ptr src) static int GET_ARRAYS(JNIEnv *env, sun_jpeg_source_ptr src) { + if (src->hOutputBuffer) { + assert(src->outbuf.ip == 0); + src->outbufSize = (*env)->GetArrayLength(env, src->hOutputBuffer); + src->outbuf.ip = (int *)(*env)->GetPrimitiveArrayCritical + (env, src->hOutputBuffer, 0); + if (src->outbuf.ip == 0) { + return 0; + } + } if (src->hInputBuffer) { assert(src->inbuf == 0); src->inbuf = (JOCTET *)(*env)->GetPrimitiveArrayCritical (env, src->hInputBuffer, 0); if (src->inbuf == 0) { + RELEASE_ARRAYS(env, src); return 0; } if ((int)(src->inbufoffset) >= 0) { src->pub.next_input_byte = src->inbuf + src->inbufoffset; } } - if (src->hOutputBuffer) { - assert(src->outbuf.ip == 0); - src->outbufSize = (*env)->GetArrayLength(env, src->hOutputBuffer); - src->outbuf.ip = (int *)(*env)->GetPrimitiveArrayCritical - (env, src->hOutputBuffer, 0); - if (src->outbuf.ip == 0) { - RELEASE_ARRAYS(env, src); - return 0; - } - } return 1; } diff --git a/test/jdk/java/awt/image/GetImageJNICheck/GetImageJNICheck.java b/test/jdk/java/awt/image/GetImageJNICheck/GetImageJNICheck.java new file mode 100644 index 0000000000000..3780fa46ba798 --- /dev/null +++ b/test/jdk/java/awt/image/GetImageJNICheck/GetImageJNICheck.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2020, 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. + */ + +import java.awt.Component; +import java.awt.Image; +import java.awt.MediaTracker; +import java.awt.Toolkit; + +public class GetImageJNICheck extends Component { + + public static void main(String[] args) throws Exception { + System.setProperty("java.awt.headless", "true"); + Toolkit tk = Toolkit.getDefaultToolkit(); + String testPath = System.getProperty("test.src", "."); + String imgFile = testPath + java.io.File.separator + "duke.jpg"; + Image image = tk.getImage(imgFile); + MediaTracker mt = new MediaTracker(new GetImageJNICheck() ); + mt.addImage(image, 0); + mt.waitForAll(); + System.exit(0); + } +} diff --git a/test/jdk/java/awt/image/GetImageJNICheck/GetImageJNICheck.sh b/test/jdk/java/awt/image/GetImageJNICheck/GetImageJNICheck.sh new file mode 100644 index 0000000000000..31b43744b89e8 --- /dev/null +++ b/test/jdk/java/awt/image/GetImageJNICheck/GetImageJNICheck.sh @@ -0,0 +1,64 @@ +#!/bin/ksh -p +# +# Copyright (c) 2020, 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 8257809 +# @summary Tests that there are no JNI warnings. +# @compile GetImageJNICheck.java +# @run shell/timeout=300 GetImageJNICheck.sh +# +OS=`uname` + +if [ "${TESTJAVA}" = "" ] +then + echo "TESTJAVA not set. Test cannot execute. Failed." + exit 1 +fi + +# pick up the compiled class files. +if [ -z "${TESTCLASSES}" ]; then + CP="." + $TESTJAVA/bin/javac GetImageJNICheck.java +else + CP="${TESTCLASSES}" +fi + +$TESTJAVA/bin/java ${TESTVMOPTS} \ + -cp "${CP}" -Xcheck:jni GetImageJNICheck | grep ReleasePrimitiveArrayCritical > "${CP}"/log.txt + +#if [ $? -ne 0 ] +# then +# echo "Test fails: exception thrown!" +# exit 1 +#fi + +# any messages logged indicate a failure. +if [ -s "${CP}"/log.txt ]; then + echo "Test failed" + cat "${CP}"/log.txt + exit 1 +fi + +echo "Test passed" +exit 0 diff --git a/test/jdk/java/awt/image/GetImageJNICheck/duke.jpg b/test/jdk/java/awt/image/GetImageJNICheck/duke.jpg new file mode 100644 index 0000000000000..3bdf9a4fc648a Binary files /dev/null and b/test/jdk/java/awt/image/GetImageJNICheck/duke.jpg differ