# HG changeset patch # User pchelko # Date 1499803577 -3600 # Node ID 986500b85859ce84ee36309abd79231afb1c913d # Parent d127560ad6ff1b492b395dd782d4e47d50b35b65 8030787: [Parfait] JNI-related warnings from b119 for jdk/src/share/native/sun/awt/image Reviewed-by: serb, prr diff -r d127560ad6ff -r 986500b85859 src/share/native/sun/awt/image/BufImgSurfaceData.c --- a/src/share/native/sun/awt/image/BufImgSurfaceData.c Fri Feb 14 10:14:11 2014 -0800 +++ b/src/share/native/sun/awt/image/BufImgSurfaceData.c Tue Jul 11 21:06:17 2017 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -69,17 +69,14 @@ } clsICMCD = (*env)->NewWeakGlobalRef(env, cd); - initICMCDmID = (*env)->GetMethodID(env, cd, "", "(J)V"); - pDataID = (*env)->GetFieldID(env, cd, "pData", "J"); - - rgbID = (*env)->GetFieldID(env, icm, "rgb", "[I"); - allGrayID = (*env)->GetFieldID(env, icm, "allgrayopaque", "Z"); - mapSizeID = (*env)->GetFieldID(env, icm, "map_size", "I"); - colorDataID = (*env)->GetFieldID(env, icm, "colorData", - "Lsun/awt/image/BufImgSurfaceData$ICMColorData;"); - if (allGrayID == 0 || rgbID == 0 || mapSizeID == 0 || pDataID == 0|| colorDataID == 0 || initICMCDmID == 0) { - JNU_ThrowInternalError(env, "Could not get field IDs"); - } + JNU_CHECK_EXCEPTION(env); + CHECK_NULL(initICMCDmID = (*env)->GetMethodID(env, cd, "", "(J)V")); + CHECK_NULL(pDataID = (*env)->GetFieldID(env, cd, "pData", "J")); + CHECK_NULL(rgbID = (*env)->GetFieldID(env, icm, "rgb", "[I")); + CHECK_NULL(allGrayID = (*env)->GetFieldID(env, icm, "allgrayopaque", "Z")); + CHECK_NULL(mapSizeID = (*env)->GetFieldID(env, icm, "map_size", "I")); + CHECK_NULL(colorDataID = (*env)->GetFieldID(env, icm, "colorData", + "Lsun/awt/image/BufImgSurfaceData$ICMColorData;")); } /* @@ -120,6 +117,7 @@ bisdo->sdOps.Unlock = NULL; bisdo->sdOps.Dispose = BufImg_Dispose; bisdo->array = (*env)->NewWeakGlobalRef(env, array); + JNU_CHECK_EXCEPTION(env); bisdo->offset = offset; bisdo->bitoffset = bitoffset; bisdo->scanStr = scanStr; @@ -131,6 +129,7 @@ } else { jobject lutarray = (*env)->GetObjectField(env, icm, rgbID); bisdo->lutarray = (*env)->NewWeakGlobalRef(env, lutarray); + JNU_CHECK_EXCEPTION(env); bisdo->lutsize = (*env)->GetIntField(env, icm, mapSizeID); bisdo->icm = (*env)->NewWeakGlobalRef(env, icm); } @@ -174,8 +173,8 @@ { bipriv->cData = BufImg_SetupICM(env, bisdo); if (bipriv->cData == NULL) { - JNU_ThrowNullPointerException(env, "Could not initialize " - "inverse tables"); + (*env)->ExceptionClear(env); + JNU_ThrowNullPointerException(env, "Could not initialize inverse tables"); return SD_FAILURE; } } else { @@ -201,6 +200,7 @@ if ((bipriv->lockFlags & (SD_LOCK_RD_WR)) != 0) { bipriv->base = (*env)->GetPrimitiveArrayCritical(env, bisdo->array, NULL); + CHECK_NULL(bipriv->base); } if ((bipriv->lockFlags & (SD_LOCK_LUT)) != 0) { bipriv->lutbase = @@ -291,6 +291,7 @@ = (*env)->GetBooleanField(env, bisdo->icm, allGrayID); int *pRgb = (int *) ((*env)->GetPrimitiveArrayCritical(env, bisdo->lutarray, NULL)); + CHECK_NULL_RETURN(pRgb, (ColorData*)NULL); cData->img_clr_tbl = initCubemap(pRgb, bisdo->lutsize, 32); if (allGray == JNI_TRUE) { initInverseGrayLut(pRgb, bisdo->lutsize, cData); @@ -303,6 +304,7 @@ if (JNU_IsNull(env, colorData)) { jlong pData = ptr_to_jlong(cData); colorData = (*env)->NewObjectA(env, clsICMCD, initICMCDmID, (jvalue *)&pData); + JNU_CHECK_EXCEPTION_RETURN(env, (ColorData*)NULL); (*env)->SetObjectField(env, bisdo->icm, colorDataID, colorData); } } diff -r d127560ad6ff -r 986500b85859 src/share/native/sun/awt/image/DataBufferNative.c --- a/src/share/native/sun/awt/image/DataBufferNative.c Fri Feb 14 10:14:11 2014 -0800 +++ b/src/share/native/sun/awt/image/DataBufferNative.c Tue Jul 11 21:06:17 2017 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -74,6 +74,7 @@ SurfaceDataOps *ops; ops = SurfaceData_GetOps(env, sd); + JNU_CHECK_EXCEPTION_RETURN(env, -1); if (!(pixelPtr = DBN_GetPixelPointer(env, x, y, &lockInfo, ops, SD_LOCK_READ))) @@ -115,6 +116,7 @@ ops = SurfaceData_GetOps(env, sd); + JNU_CHECK_EXCEPTION(env); if (!(pixelPtr = DBN_GetPixelPointer(env, x, y, &lockInfo, ops, SD_LOCK_WRITE))) diff -r d127560ad6ff -r 986500b85859 src/share/native/sun/awt/image/awt_ImageRep.c --- a/src/share/native/sun/awt/image/awt_ImageRep.c Fri Feb 14 10:14:11 2014 -0800 +++ b/src/share/native/sun/awt/image/awt_ImageRep.c Tue Jul 11 21:06:17 2017 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -97,9 +97,9 @@ JNIEXPORT void JNICALL Java_sun_awt_image_ImageRepresentation_initIDs(JNIEnv *env, jclass cls) { - s_JnumSrcLUTID = (*env)->GetFieldID(env, cls, "numSrcLUT", "I"); - s_JsrcLUTtransIndexID = (*env)->GetFieldID(env, cls, "srcLUTtransIndex", - "I"); + CHECK_NULL(s_JnumSrcLUTID = (*env)->GetFieldID(env, cls, "numSrcLUT", "I")); + CHECK_NULL(s_JsrcLUTtransIndexID = (*env)->GetFieldID(env, cls, + "srcLUTtransIndex", "I")); } /* @@ -166,6 +166,7 @@ cOffs = (int *) (*env)->GetPrimitiveArrayCritical(env, joffs, NULL); if (cOffs == NULL) { + (*env)->ExceptionClear(env); JNU_ThrowNullPointerException(env, "Null channel offset array"); return JNI_FALSE; } @@ -190,6 +191,7 @@ srcLUT = (int *) (*env)->GetPrimitiveArrayCritical(env, jlut, NULL); if (srcLUT == NULL) { + (*env)->ExceptionClear(env); JNU_ThrowNullPointerException(env, "Null IndexColorModel LUT"); return JNI_FALSE; } @@ -198,6 +200,7 @@ NULL); if (srcData == NULL) { (*env)->ReleasePrimitiveArrayCritical(env, jlut, srcLUT, JNI_ABORT); + (*env)->ExceptionClear(env); JNU_ThrowNullPointerException(env, "Null data array"); return JNI_FALSE; } @@ -206,6 +209,7 @@ if (dstData == NULL) { (*env)->ReleasePrimitiveArrayCritical(env, jlut, srcLUT, JNI_ABORT); (*env)->ReleasePrimitiveArrayCritical(env, jpix, srcData, JNI_ABORT); + (*env)->ExceptionClear(env); JNU_ThrowNullPointerException(env, "Null tile data array"); return JNI_FALSE; } diff -r d127560ad6ff -r 986500b85859 src/share/native/sun/awt/image/awt_parseImage.c --- a/src/share/native/sun/awt/image/awt_parseImage.c Fri Feb 14 10:14:11 2014 -0800 +++ b/src/share/native/sun/awt/image/awt_parseImage.c Tue Jul 11 21:06:17 2017 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -226,8 +226,11 @@ rasterP->sppsm.isUsed = 0; + jclass singlePixelPackedSampleModelClass = (*env)->FindClass(env, + "java/awt/image/SinglePixelPackedSampleModel"); + CHECK_NULL_RETURN(singlePixelPackedSampleModelClass, -1); if ((*env)->IsInstanceOf(env, rasterP->jsampleModel, - (*env)->FindClass(env,"java/awt/image/SinglePixelPackedSampleModel"))) { + singlePixelPackedSampleModelClass)) { jobject jmask, joffs, jnbits; rasterP->sppsm.isUsed = 1; @@ -261,8 +264,19 @@ rasterP->jsampleModel, g_SMHeightID); - if ((*env)->IsInstanceOf(env, jraster, - (*env)->FindClass(env, "sun/awt/image/IntegerComponentRaster"))){ + jclass integerComponentRasterClass = (*env)->FindClass(env, + "sun/awt/image/IntegerComponentRaster"); + CHECK_NULL_RETURN(integerComponentRasterClass, -1); + jclass byteComponentRasterClass = (*env)->FindClass(env, + "sun/awt/image/ByteComponentRaster"); + CHECK_NULL_RETURN(byteComponentRasterClass, -1); + jclass shortComponentRasterClass = (*env)->FindClass(env, + "sun/awt/image/ShortComponentRaster"); + CHECK_NULL_RETURN(shortComponentRasterClass, -1); + jclass bytePackedRasterClass = (*env)->FindClass(env, + "sun/awt/image/BytePackedRaster"); + CHECK_NULL_RETURN(bytePackedRasterClass, -1); + if ((*env)->IsInstanceOf(env, jraster, integerComponentRasterClass)){ rasterP->jdata = (*env)->GetObjectField(env, jraster, g_ICRdataID); rasterP->dataType = INT_DATA_TYPE; rasterP->dataSize = 4; @@ -273,8 +287,7 @@ rasterP->pixelStride = (*env)->GetIntField(env, jraster, g_ICRpixstrID); joffs = (*env)->GetObjectField(env, jraster, g_ICRdataOffsetsID); } - else if ((*env)->IsInstanceOf(env, jraster, - (*env)->FindClass(env, "sun/awt/image/ByteComponentRaster"))){ + else if ((*env)->IsInstanceOf(env, jraster, byteComponentRasterClass)){ rasterP->jdata = (*env)->GetObjectField(env, jraster, g_BCRdataID); rasterP->dataType = BYTE_DATA_TYPE; rasterP->dataSize = 1; @@ -285,8 +298,7 @@ rasterP->pixelStride = (*env)->GetIntField(env, jraster, g_BCRpixstrID); joffs = (*env)->GetObjectField(env, jraster, g_BCRdataOffsetsID); } - else if ((*env)->IsInstanceOf(env, jraster, - (*env)->FindClass(env, "sun/awt/image/ShortComponentRaster"))){ + else if ((*env)->IsInstanceOf(env, jraster, shortComponentRasterClass)){ rasterP->jdata = (*env)->GetObjectField(env, jraster, g_SCRdataID); rasterP->dataType = SHORT_DATA_TYPE; rasterP->dataSize = 2; @@ -297,8 +309,7 @@ rasterP->pixelStride = (*env)->GetIntField(env, jraster, g_SCRpixstrID); joffs = (*env)->GetObjectField(env, jraster, g_SCRdataOffsetsID); } - else if ((*env)->IsInstanceOf(env, jraster, - (*env)->FindClass(env, "sun/awt/image/BytePackedRaster"))){ + else if ((*env)->IsInstanceOf(env, jraster, bytePackedRasterClass)){ rasterP->rasterType = PACKED_RASTER_TYPE; rasterP->dataType = BYTE_DATA_TYPE; rasterP->dataSize = 1; @@ -397,30 +408,41 @@ } static int getColorModelType(JNIEnv *env, jobject jcmodel) { - int type = UNKNOWN_CM_TYPE; + jclass colorModelClass; - if ((*env)->IsInstanceOf(env, jcmodel, - (*env)->FindClass(env, "java/awt/image/IndexColorModel"))) + colorModelClass = (*env)->FindClass(env, + "java/awt/image/IndexColorModel"); + CHECK_NULL_RETURN(colorModelClass, UNKNOWN_CM_TYPE); + + if ((*env)->IsInstanceOf(env, jcmodel, colorModelClass)) { - type = INDEX_CM_TYPE; - } else if ((*env)->IsInstanceOf(env, jcmodel, - (*env)->FindClass(env, "java/awt/image/PackedColorModel"))) + return INDEX_CM_TYPE; + } + + colorModelClass = (*env)->FindClass(env, + "java/awt/image/PackedColorModel"); + CHECK_NULL_RETURN(colorModelClass, UNKNOWN_CM_TYPE); + if ((*env)->IsInstanceOf(env, jcmodel, colorModelClass)) { - if ((*env)->IsInstanceOf(env, jcmodel, - (*env)->FindClass(env, "java/awt/image/DirectColorModel"))) { - type = DIRECT_CM_TYPE; + colorModelClass = (*env)->FindClass(env, + "java/awt/image/DirectColorModel"); + CHECK_NULL_RETURN(colorModelClass, UNKNOWN_CM_TYPE); + if ((*env)->IsInstanceOf(env, jcmodel, colorModelClass)) { + return DIRECT_CM_TYPE; } else { - type = PACKED_CM_TYPE; + return PACKED_CM_TYPE; } } - else if ((*env)->IsInstanceOf(env, jcmodel, - (*env)->FindClass(env, "java/awt/image/ComponentColorModel"))) + colorModelClass = (*env)->FindClass(env, + "java/awt/image/ComponentColorModel"); + CHECK_NULL_RETURN(colorModelClass, UNKNOWN_CM_TYPE); + if ((*env)->IsInstanceOf(env, jcmodel, colorModelClass)) { - type = COMPONENT_CM_TYPE; + return COMPONENT_CM_TYPE; } - return type; + return UNKNOWN_CM_TYPE; } int awt_parseColorModel (JNIEnv *env, jobject jcmodel, int imageType, @@ -506,12 +528,13 @@ if (s_jdefCM == NULL) { jobject defCM; jclass jcm = (*env)->FindClass(env, "java/awt/image/ColorModel"); + CHECK_NULL_RETURN(jcm, -1); defCM = (*env)->CallStaticObjectMethod(env, jcm, g_CMgetRGBdefaultMID, NULL); s_jdefCM = (*env)->NewGlobalRef(env, defCM); if (defCM == NULL || s_jdefCM == NULL) { - JNU_ThrowNullPointerException(env, - "Unable to find default CM"); + (*env)->ExceptionClear(env); + JNU_ThrowNullPointerException(env, "Unable to find default CM"); return -1; } } @@ -866,6 +889,7 @@ jdata = (*env)->NewIntArray(env, maxSamples); if (JNU_IsNull(env, jdata)) { + (*env)->ExceptionClear(env); JNU_ThrowOutOfMemoryError(env, "Out of Memory"); return -1; } @@ -963,6 +987,7 @@ jdata = (*env)->NewIntArray(env, maxSamples); if (JNU_IsNull(env, jdata)) { + (*env)->ExceptionClear(env); JNU_ThrowOutOfMemoryError(env, "Out of Memory"); return -1; } diff -r d127560ad6ff -r 986500b85859 src/share/native/sun/awt/image/gif/gifdecoder.c --- a/src/share/native/sun/awt/image/gif/gifdecoder.c Fri Feb 14 10:14:11 2014 -0800 +++ b/src/share/native/sun/awt/image/gif/gifdecoder.c Tue Jul 11 21:06:17 2017 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -104,12 +104,12 @@ JNIEXPORT void JNICALL Java_sun_awt_image_GifImageDecoder_initIDs(JNIEnv *env, jclass this) { - readID = (*env)->GetMethodID(env, this, "readBytes", "([BII)I"); - sendID = (*env)->GetMethodID(env, this, "sendPixels", - "(IIII[BLjava/awt/image/ColorModel;)I"); - prefixID = (*env)->GetFieldID(env, this, "prefix", "[S"); - suffixID = (*env)->GetFieldID(env, this, "suffix", "[B"); - outCodeID = (*env)->GetFieldID(env, this, "outCode", "[B"); + CHECK_NULL(readID = (*env)->GetMethodID(env, this, "readBytes", "([BII)I")); + CHECK_NULL(sendID = (*env)->GetMethodID(env, this, "sendPixels", + "(IIII[BLjava/awt/image/ColorModel;)I")); + CHECK_NULL(prefixID = (*env)->GetFieldID(env, this, "prefix", "[S")); + CHECK_NULL(suffixID = (*env)->GetFieldID(env, this, "suffix", "[B")); + CHECK_NULL(outCodeID = (*env)->GetFieldID(env, this, "outCode", "[B")); } JNIEXPORT jboolean JNICALL @@ -292,8 +292,10 @@ * reads the immediately subsequent code as uncompressed data. */ if (verbose) { + RELEASE_ARRAYS(); fprintf(stdout, "."); fflush(stdout); + GET_ARRAYS(); } /* Note that freeCode is one less than it is supposed to be, @@ -319,10 +321,10 @@ /* make sure we read the whole block of pixels. */ flushit: while (!blockEnd) { + RELEASE_ARRAYS(); if (verbose) { fprintf(stdout, "flushing %d bytes\n", blockLength); } - RELEASE_ARRAYS(); if ((*env)->CallIntMethod(env, this, readID, blockh, 0, blockLength + 1) != 0 || (*env)->ExceptionOccurred(env)) diff -r d127560ad6ff -r 986500b85859 src/share/native/sun/awt/image/imageInitIDs.c --- a/src/share/native/sun/awt/image/imageInitIDs.c Fri Feb 14 10:14:11 2014 -0800 +++ b/src/share/native/sun/awt/image/imageInitIDs.c Tue Jul 11 21:06:17 2017 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -29,211 +29,139 @@ JNIEXPORT void JNICALL Java_java_awt_image_BufferedImage_initIDs(JNIEnv *env, jclass cls) { - g_BImgRasterID = (*env)->GetFieldID(env, cls, "raster", - "Ljava/awt/image/WritableRaster;"); - g_BImgTypeID = (*env)->GetFieldID(env, cls, "imageType", "I"); - g_BImgCMID = (*env)->GetFieldID(env, cls, "colorModel", - "Ljava/awt/image/ColorModel;"); - g_BImgGetRGBMID = (*env)->GetMethodID(env, cls, "getRGB", - "(IIII[III)[I"); - g_BImgSetRGBMID = (*env)->GetMethodID(env, cls, "setRGB", - "(IIII[III)V"); - if (g_BImgRasterID == NULL || g_BImgTypeID == NULL || g_BImgCMID == NULL - || g_BImgGetRGBMID == NULL) { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } + CHECK_NULL(g_BImgRasterID = (*env)->GetFieldID(env, cls, "raster", + "Ljava/awt/image/WritableRaster;")); + CHECK_NULL(g_BImgTypeID = (*env)->GetFieldID(env, cls, "imageType", "I")); + CHECK_NULL(g_BImgCMID = (*env)->GetFieldID(env, cls, "colorModel", + "Ljava/awt/image/ColorModel;")); + CHECK_NULL(g_BImgGetRGBMID = (*env)->GetMethodID(env, cls, "getRGB", + "(IIII[III)[I")); + CHECK_NULL(g_BImgSetRGBMID = (*env)->GetMethodID(env, cls, "setRGB", + "(IIII[III)V")); } JNIEXPORT void JNICALL Java_java_awt_image_Raster_initIDs(JNIEnv *env, jclass cls) { - g_RasterWidthID = (*env)->GetFieldID(env, cls, "width", "I"); - g_RasterHeightID = (*env)->GetFieldID(env, cls, "height", "I"); - g_RasterNumBandsID = (*env)->GetFieldID(env, cls, "numBands", "I"); - g_RasterGetDataMID = (*env)->GetMethodID(env, cls, "getDataElements", - "(IIIILjava/lang/Object;)Ljava/lang/Object;"); - g_RasterMinXID = (*env)->GetFieldID(env, cls, "minX", "I"); - g_RasterMinYID = (*env)->GetFieldID(env, cls, "minY", "I"); - g_RasterBaseOriginXID = (*env)->GetFieldID(env, cls, - "sampleModelTranslateX", "I"); - g_RasterBaseOriginYID = (*env)->GetFieldID(env, cls, - "sampleModelTranslateY", "I"); - g_RasterSampleModelID = (*env)->GetFieldID(env, cls, - "sampleModel","Ljava/awt/image/SampleModel;"); - g_RasterNumDataElementsID = (*env)->GetFieldID(env, cls, "numDataElements", - "I"); - g_RasterNumBandsID = (*env)->GetFieldID(env, cls, "numBands", "I"); - g_RasterDataBufferID = (*env)->GetFieldID(env, cls, "dataBuffer", - "Ljava/awt/image/DataBuffer;"); - if (g_RasterWidthID == NULL || g_RasterHeightID == NULL - || g_RasterNumBandsID == NULL || g_RasterGetDataMID == NULL - || g_RasterMinXID == NULL || g_RasterMinYID == NULL - || g_RasterBaseOriginXID == NULL || g_RasterBaseOriginYID == NULL - || g_RasterSampleModelID == NULL || g_RasterNumDataElementsID == NULL - || g_RasterNumBandsID == NULL || g_RasterDataBufferID == NULL) - { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } + CHECK_NULL(g_RasterWidthID = (*env)->GetFieldID(env, cls, "width", "I")); + CHECK_NULL(g_RasterHeightID = (*env)->GetFieldID(env, cls, "height", "I")); + CHECK_NULL(g_RasterNumBandsID = (*env)->GetFieldID(env, cls, "numBands", "I")); + CHECK_NULL(g_RasterGetDataMID = (*env)->GetMethodID(env, cls, "getDataElements", + "(IIIILjava/lang/Object;)Ljava/lang/Object;")); + CHECK_NULL(g_RasterMinXID = (*env)->GetFieldID(env, cls, "minX", "I")); + CHECK_NULL(g_RasterMinYID = (*env)->GetFieldID(env, cls, "minY", "I")); + CHECK_NULL(g_RasterBaseOriginXID = (*env)->GetFieldID(env, cls, + "sampleModelTranslateX", "I")); + CHECK_NULL(g_RasterBaseOriginYID = (*env)->GetFieldID(env, cls, + "sampleModelTranslateY", "I")); + CHECK_NULL(g_RasterSampleModelID = (*env)->GetFieldID(env, cls, + "sampleModel","Ljava/awt/image/SampleModel;")); + CHECK_NULL(g_RasterNumDataElementsID = (*env)->GetFieldID(env, cls, + "numDataElements", "I")); + CHECK_NULL(g_RasterNumBandsID = (*env)->GetFieldID(env, cls, "numBands", "I")); + CHECK_NULL(g_RasterDataBufferID = (*env)->GetFieldID(env, cls, "dataBuffer", + "Ljava/awt/image/DataBuffer;")); } JNIEXPORT void JNICALL Java_sun_awt_image_ByteComponentRaster_initIDs(JNIEnv *env, jclass cls) { - g_BCRdataID = (*env)->GetFieldID(env, cls, "data", "[B"); - g_BCRscanstrID = (*env)->GetFieldID(env, cls, "scanlineStride", "I"); - g_BCRpixstrID = (*env)->GetFieldID(env, cls, "pixelStride", "I"); - g_BCRbandoffsID = (*env)->GetFieldID(env, cls, "bandOffset", "I"); - g_BCRdataOffsetsID = (*env)->GetFieldID(env, cls, "dataOffsets", "[I"); - g_BCRtypeID = (*env)->GetFieldID(env, cls, "type", "I"); - if (g_BCRdataID == NULL || g_BCRscanstrID == NULL || - g_BCRpixstrID == NULL || g_BCRbandoffsID == NULL || - g_BCRtypeID == NULL) - { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } + CHECK_NULL(g_BCRdataID = (*env)->GetFieldID(env, cls, "data", "[B")); + CHECK_NULL(g_BCRscanstrID = (*env)->GetFieldID(env, cls, "scanlineStride", "I")); + CHECK_NULL(g_BCRpixstrID = (*env)->GetFieldID(env, cls, "pixelStride", "I")); + CHECK_NULL(g_BCRbandoffsID = (*env)->GetFieldID(env, cls, "bandOffset", "I")); + CHECK_NULL(g_BCRdataOffsetsID = (*env)->GetFieldID(env, cls, "dataOffsets", "[I")); + CHECK_NULL(g_BCRtypeID = (*env)->GetFieldID(env, cls, "type", "I")); } JNIEXPORT void JNICALL Java_sun_awt_image_BytePackedRaster_initIDs(JNIEnv *env, jclass cls) { - g_BPRdataID = (*env)->GetFieldID(env, cls, "data", "[B"); - g_BPRscanstrID = (*env)->GetFieldID(env, cls, "scanlineStride", "I"); - g_BPRpixstrID = (*env)->GetFieldID(env, cls, "pixelBitStride", "I"); - g_BPRtypeID = (*env)->GetFieldID(env, cls, "type", "I"); - g_BPRdataBitOffsetID = (*env)->GetFieldID(env, cls, "dataBitOffset", "I"); - if (g_BPRdataID == NULL || g_BPRscanstrID == NULL || - g_BPRpixstrID == NULL || g_BPRtypeID == NULL) - { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } + CHECK_NULL(g_BPRdataID = (*env)->GetFieldID(env, cls, "data", "[B")); + CHECK_NULL(g_BPRscanstrID = (*env)->GetFieldID(env, cls, "scanlineStride", "I")); + CHECK_NULL(g_BPRpixstrID = (*env)->GetFieldID(env, cls, "pixelBitStride", "I")); + CHECK_NULL(g_BPRtypeID = (*env)->GetFieldID(env, cls, "type", "I")); + CHECK_NULL(g_BPRdataBitOffsetID = (*env)->GetFieldID(env, cls, "dataBitOffset", "I")); } JNIEXPORT void JNICALL Java_sun_awt_image_ShortComponentRaster_initIDs(JNIEnv *env, jclass cls) { - g_SCRdataID = (*env)->GetFieldID(env, cls, "data", "[S"); - g_SCRscanstrID = (*env)->GetFieldID(env, cls, "scanlineStride", "I"); - g_SCRpixstrID = (*env)->GetFieldID(env, cls, "pixelStride", "I"); - g_SCRbandoffsID = (*env)->GetFieldID(env, cls, "bandOffset", "I"); - g_SCRdataOffsetsID = (*env)->GetFieldID(env, cls, "dataOffsets", "[I"); - g_SCRtypeID = (*env)->GetFieldID(env, cls, "type", "I"); - if (g_SCRdataID == NULL || g_SCRscanstrID == NULL || - g_SCRpixstrID == NULL || g_SCRbandoffsID == NULL || - g_SCRdataOffsetsID == NULL || g_SCRtypeID == NULL) - { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } + CHECK_NULL(g_SCRdataID = (*env)->GetFieldID(env, cls, "data", "[S")); + CHECK_NULL(g_SCRscanstrID = (*env)->GetFieldID(env, cls, "scanlineStride", "I")); + CHECK_NULL(g_SCRpixstrID = (*env)->GetFieldID(env, cls, "pixelStride", "I")); + CHECK_NULL(g_SCRbandoffsID = (*env)->GetFieldID(env, cls, "bandOffset", "I")); + CHECK_NULL(g_SCRdataOffsetsID = (*env)->GetFieldID(env, cls, "dataOffsets", "[I")); + CHECK_NULL(g_SCRtypeID = (*env)->GetFieldID(env, cls, "type", "I")); } JNIEXPORT void JNICALL Java_sun_awt_image_IntegerComponentRaster_initIDs(JNIEnv *env, jclass cls) { - g_ICRdataID = (*env)->GetFieldID(env, cls, "data", "[I"); - g_ICRscanstrID = (*env)->GetFieldID(env, cls, "scanlineStride", "I"); - g_ICRpixstrID = (*env)->GetFieldID(env, cls, "pixelStride", "I"); - g_ICRdataOffsetsID = (*env)->GetFieldID(env, cls, "dataOffsets", "[I"); - g_ICRbandoffsID = (*env)->GetFieldID(env, cls, "bandOffset", "I"); - g_ICRputDataMID = (*env)->GetMethodID(env, cls, "setDataElements", - "(IIIILjava/lang/Object;)V"); - g_ICRtypeID = (*env)->GetFieldID(env, cls, "type", "I"); - if (g_ICRdataID == NULL || g_ICRscanstrID == NULL - || g_ICRpixstrID == NULL || g_ICRbandoffsID == NULL - || g_ICRputDataMID == NULL || g_ICRdataOffsetsID == NULL || g_ICRtypeID == NULL) - { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } + CHECK_NULL(g_ICRdataID = (*env)->GetFieldID(env, cls, "data", "[I")); + CHECK_NULL(g_ICRscanstrID = (*env)->GetFieldID(env, cls, "scanlineStride", "I")); + CHECK_NULL(g_ICRpixstrID = (*env)->GetFieldID(env, cls, "pixelStride", "I")); + CHECK_NULL(g_ICRdataOffsetsID = (*env)->GetFieldID(env, cls, "dataOffsets", "[I")); + CHECK_NULL(g_ICRbandoffsID = (*env)->GetFieldID(env, cls, "bandOffset", "I")); + CHECK_NULL(g_ICRputDataMID = (*env)->GetMethodID(env, cls, "setDataElements", + "(IIIILjava/lang/Object;)V")); + CHECK_NULL(g_ICRtypeID = (*env)->GetFieldID(env, cls, "type", "I")); } JNIEXPORT void JNICALL -Java_java_awt_image_SinglePixelPackedSampleModel_initIDs(JNIEnv *env, - jclass cls) { - g_SPPSMmaskArrID = (*env)->GetFieldID(env, cls, "bitMasks", "[I"); - g_SPPSMmaskOffID = (*env)->GetFieldID(env, cls, "bitOffsets", "[I"); - g_SPPSMnBitsID = (*env)->GetFieldID(env, cls, "bitSizes", "[I"); - g_SPPSMmaxBitID = (*env)->GetFieldID(env, cls, "maxBitSize", "I"); - - if (g_SPPSMmaskArrID == NULL || g_SPPSMmaskOffID == NULL || - g_SPPSMnBitsID == NULL || g_SPPSMmaxBitID == NULL) { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } +Java_java_awt_image_SinglePixelPackedSampleModel_initIDs(JNIEnv *env, jclass cls) { + CHECK_NULL(g_SPPSMmaskArrID = (*env)->GetFieldID(env, cls, "bitMasks", "[I")); + CHECK_NULL(g_SPPSMmaskOffID = (*env)->GetFieldID(env, cls, "bitOffsets", "[I")); + CHECK_NULL(g_SPPSMnBitsID = (*env)->GetFieldID(env, cls, "bitSizes", "[I")); + CHECK_NULL(g_SPPSMmaxBitID = (*env)->GetFieldID(env, cls, "maxBitSize", "I")); } JNIEXPORT void JNICALL Java_java_awt_image_ColorModel_initIDs(JNIEnv *env, jclass cls) { - g_CMpDataID = (*env)->GetFieldID (env, cls, "pData", "J"); - g_CMnBitsID = (*env)->GetFieldID(env, cls, "nBits", "[I"); - g_CMcspaceID = (*env)->GetFieldID(env, cls, "colorSpace", - "Ljava/awt/color/ColorSpace;"); - g_CMnumComponentsID = (*env)->GetFieldID(env, cls, "numComponents", "I"); - g_CMsuppAlphaID = (*env)->GetFieldID(env, cls, "supportsAlpha", "Z"); - g_CMisAlphaPreID = (*env)->GetFieldID(env, cls, "isAlphaPremultiplied", - "Z"); - g_CMtransparencyID = (*env)->GetFieldID(env, cls, "transparency", "I"); - g_CMgetRGBMID = (*env)->GetMethodID(env, cls, "getRGB", - "(Ljava/lang/Object;)I"); - g_CMcsTypeID = (*env)->GetFieldID(env, cls, "colorSpaceType", "I"); - g_CMis_sRGBID = (*env)->GetFieldID(env, cls, "is_sRGB", "Z"); - g_CMgetRGBdefaultMID = (*env)->GetStaticMethodID(env, cls, + CHECK_NULL(g_CMpDataID = (*env)->GetFieldID (env, cls, "pData", "J")); + CHECK_NULL(g_CMnBitsID = (*env)->GetFieldID(env, cls, "nBits", "[I")); + CHECK_NULL(g_CMcspaceID = (*env)->GetFieldID(env, cls, "colorSpace", + "Ljava/awt/color/ColorSpace;")); + CHECK_NULL(g_CMnumComponentsID = (*env)->GetFieldID(env, cls, "numComponents", "I")); + CHECK_NULL(g_CMsuppAlphaID = (*env)->GetFieldID(env, cls, "supportsAlpha", "Z")); + CHECK_NULL(g_CMisAlphaPreID = (*env)->GetFieldID(env, cls, "isAlphaPremultiplied", + "Z")); + CHECK_NULL(g_CMtransparencyID = (*env)->GetFieldID(env, cls, "transparency", "I")); + CHECK_NULL(g_CMgetRGBMID = (*env)->GetMethodID(env, cls, "getRGB", + "(Ljava/lang/Object;)I")); + CHECK_NULL(g_CMcsTypeID = (*env)->GetFieldID(env, cls, "colorSpaceType", "I")); + CHECK_NULL(g_CMis_sRGBID = (*env)->GetFieldID(env, cls, "is_sRGB", "Z")); + CHECK_NULL(g_CMgetRGBdefaultMID = (*env)->GetStaticMethodID(env, cls, "getRGBdefault", - "()Ljava/awt/image/ColorModel;"); - if (g_CMnBitsID == NULL || g_CMcspaceID == NULL - || g_CMnumComponentsID == NULL || g_CMsuppAlphaID == NULL - || g_CMisAlphaPreID == NULL || g_CMtransparencyID == NULL - || g_CMgetRGBMID == NULL || g_CMgetRGBMID == NULL - || g_CMis_sRGBID == NULL || g_CMgetRGBdefaultMID == NULL - || g_CMpDataID == NULL) - { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } + "()Ljava/awt/image/ColorModel;")); } JNIEXPORT void JNICALL Java_java_awt_image_IndexColorModel_initIDs(JNIEnv *env, jclass cls) { - g_ICMtransIdxID = (*env)->GetFieldID(env, cls, "transparent_index", "I"); - g_ICMmapSizeID = (*env)->GetFieldID(env, cls, "map_size", "I"); - g_ICMrgbID = (*env)->GetFieldID(env, cls, "rgb", "[I"); - if (g_ICMtransIdxID == NULL || g_ICMmapSizeID == NULL - || g_ICMrgbID == NULL) { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } + CHECK_NULL(g_ICMtransIdxID = (*env)->GetFieldID(env, cls, "transparent_index", "I")); + CHECK_NULL(g_ICMmapSizeID = (*env)->GetFieldID(env, cls, "map_size", "I")); + CHECK_NULL(g_ICMrgbID = (*env)->GetFieldID(env, cls, "rgb", "[I")); } JNIEXPORT void JNICALL Java_java_awt_image_SampleModel_initIDs(JNIEnv *env, jclass cls) { - g_SMWidthID = (*env)->GetFieldID(env, cls, "width","I"); - g_SMHeightID = (*env)->GetFieldID(env, cls, "height","I"); - g_SMGetPixelsMID = (*env)->GetMethodID(env, cls, "getPixels", - "(IIII[ILjava/awt/image/DataBuffer;)[I"); - g_SMSetPixelsMID = (*env)->GetMethodID(env, cls, "setPixels", - "(IIII[ILjava/awt/image/DataBuffer;)V"); - if (g_SMWidthID == NULL || g_SMHeightID == NULL || g_SMGetPixelsMID == NULL - || g_SMSetPixelsMID == NULL) { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } + CHECK_NULL(g_SMWidthID = (*env)->GetFieldID(env, cls, "width","I")); + CHECK_NULL(g_SMHeightID = (*env)->GetFieldID(env, cls, "height","I")); + CHECK_NULL(g_SMGetPixelsMID = (*env)->GetMethodID(env, cls, "getPixels", + "(IIII[ILjava/awt/image/DataBuffer;)[I")); + CHECK_NULL(g_SMSetPixelsMID = (*env)->GetMethodID(env, cls, "setPixels", + "(IIII[ILjava/awt/image/DataBuffer;)V")); } JNIEXPORT void JNICALL Java_java_awt_image_ComponentSampleModel_initIDs(JNIEnv *env, jclass cls) { - g_CSMPixStrideID = (*env)->GetFieldID(env, cls, "pixelStride", "I"); - g_CSMScanStrideID = (*env)->GetFieldID(env, cls, "scanlineStride", "I"); - g_CSMBandOffsetsID = (*env)->GetFieldID(env, cls, "bandOffsets", "[I"); - if (g_CSMPixStrideID == NULL || g_CSMScanStrideID == NULL || - g_CSMBandOffsetsID == NULL) { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } + CHECK_NULL(g_CSMPixStrideID = (*env)->GetFieldID(env, cls, "pixelStride", "I")); + CHECK_NULL(g_CSMScanStrideID = (*env)->GetFieldID(env, cls, "scanlineStride", "I")); + CHECK_NULL(g_CSMBandOffsetsID = (*env)->GetFieldID(env, cls, "bandOffsets", "[I")); } JNIEXPORT void JNICALL Java_java_awt_image_Kernel_initIDs(JNIEnv *env, jclass cls) { - g_KernelWidthID = (*env)->GetFieldID(env, cls, "width", "I"); - g_KernelHeightID = (*env)->GetFieldID(env, cls, "height", "I"); - g_KernelDataID = (*env)->GetFieldID(env, cls, "data", "[F"); - if (g_KernelWidthID == NULL || g_KernelHeightID == NULL - || g_KernelDataID == NULL) - { - JNU_ThrowNullPointerException(env, "Unable to grab field ids"); - } + CHECK_NULL(g_KernelWidthID = (*env)->GetFieldID(env, cls, "width", "I")); + CHECK_NULL(g_KernelHeightID = (*env)->GetFieldID(env, cls, "height", "I")); + CHECK_NULL(g_KernelDataID = (*env)->GetFieldID(env, cls, "data", "[F")); } JNIEXPORT void JNICALL Java_java_awt_image_DataBufferInt_initIDs(JNIEnv *env, jclass cls) { - g_DataBufferIntPdataID = (*env)->GetFieldID(env, cls, "pData", "J"); - if (g_DataBufferIntPdataID == NULL) { - JNU_ThrowNullPointerException(env, "Unable to grab DataBufferInt.pData"); - return; - } + CHECK_NULL(g_DataBufferIntPdataID = (*env)->GetFieldID(env, cls, "pData", "J")); } diff -r d127560ad6ff -r 986500b85859 src/share/native/sun/awt/image/jpeg/imageioJPEG.c --- a/src/share/native/sun/awt/image/jpeg/imageioJPEG.c Fri Feb 14 10:14:11 2014 -0800 +++ b/src/share/native/sun/awt/image/jpeg/imageioJPEG.c Tue Jul 11 21:06:17 2017 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2014, 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 @@ -153,6 +153,7 @@ /* Initialize a new buffer */ jbyteArray hInputBuffer = (*env)->NewByteArray(env, STREAMBUF_SIZE); if (hInputBuffer == NULL) { + (*env)->ExceptionClear(env); JNU_ThrowByName( env, "java/lang/OutOfMemoryError", "Initializing Reader"); @@ -557,6 +558,7 @@ // Create a new java string from the message string = (*env)->NewStringUTF(env, buffer); + CHECK_NULL(string); theObject = data->imageIOobj; @@ -591,12 +593,7 @@ /* Now we need a new weak global reference for the I/O provider */ if (io != NULL) { // Fix for 4411955 sb->ioRef = (*env)->NewWeakGlobalRef(env, io); - if (sb->ioRef == NULL) { - JNU_ThrowByName(env, - "java/lang/OutOfMemoryError", - "Setting I/O provider"); - return; - } + CHECK_NULL(sb->ioRef); } /* And finally reset state */ @@ -693,6 +690,7 @@ } for (i = 0; i < qlen; i++) { table = (*env)->GetObjectArrayElement(env, qtables, i); + CHECK_NULL_RETURN(table, 0); qdata = (*env)->GetObjectField(env, table, JPEGQTable_tableID); qdataBody = (*env)->GetPrimitiveArrayCritical(env, qdata, NULL); @@ -724,7 +722,7 @@ return qlen; } -static void setHuffTable(JNIEnv *env, +static boolean setHuffTable(JNIEnv *env, JHUFF_TBL *huff_ptr, jobject table) { @@ -742,6 +740,8 @@ hlensBody = (*env)->GetShortArrayElements(env, huffLens, NULL); + CHECK_NULL_RETURN(hlensBody, FALSE); + if (hlensLen > 16) { /* Ignore extra elements of bits array. Only 16 elements can be stored. 0-th element is not used. (see jpeglib.h, line 107) */ @@ -762,6 +762,7 @@ hvalsBody = (*env)->GetShortArrayElements(env, huffValues, NULL); + CHECK_NULL_RETURN(hvalsBody, FALSE); if (hvalsLen > 256) { /* Ignore extra elements of hufval array. Only 256 elements @@ -775,6 +776,7 @@ huffValues, hvalsBody, JNI_ABORT); + return TRUE; } static int setHTables(JNIEnv *env, @@ -810,7 +812,9 @@ huff_ptr = comp->dc_huff_tbl_ptrs[i]; } table = (*env)->GetObjectArrayElement(env, DCHuffmanTables, i); - setHuffTable(env, huff_ptr, table); + if (table == NULL || !setHuffTable(env, huff_ptr, table)) { + return 0; + } huff_ptr->sent_table = !write; } hlen = (*env)->GetArrayLength(env, ACHuffmanTables); @@ -835,7 +839,9 @@ huff_ptr = comp->ac_huff_tbl_ptrs[i]; } table = (*env)->GetObjectArrayElement(env, ACHuffmanTables, i); - setHuffTable(env, huff_ptr, table); + if(table == NULL || !setHuffTable(env, huff_ptr, table)) { + return 0; + } huff_ptr->sent_table = !write; } return hlen; @@ -1409,57 +1415,57 @@ jclass qTableClass, jclass huffClass) { - JPEGImageReader_readInputDataID = (*env)->GetMethodID(env, + CHECK_NULL(JPEGImageReader_readInputDataID = (*env)->GetMethodID(env, cls, "readInputData", - "([BII)I"); - JPEGImageReader_skipInputBytesID = (*env)->GetMethodID(env, + "([BII)I")); + CHECK_NULL(JPEGImageReader_skipInputBytesID = (*env)->GetMethodID(env, cls, "skipInputBytes", - "(J)J"); - JPEGImageReader_warningOccurredID = (*env)->GetMethodID(env, + "(J)J")); + CHECK_NULL(JPEGImageReader_warningOccurredID = (*env)->GetMethodID(env, cls, "warningOccurred", - "(I)V"); - JPEGImageReader_warningWithMessageID = + "(I)V")); + CHECK_NULL(JPEGImageReader_warningWithMessageID = (*env)->GetMethodID(env, cls, "warningWithMessage", - "(Ljava/lang/String;)V"); - JPEGImageReader_setImageDataID = (*env)->GetMethodID(env, + "(Ljava/lang/String;)V")); + CHECK_NULL(JPEGImageReader_setImageDataID = (*env)->GetMethodID(env, cls, "setImageData", - "(IIIII[B)V"); - JPEGImageReader_acceptPixelsID = (*env)->GetMethodID(env, + "(IIIII[B)V")); + CHECK_NULL(JPEGImageReader_acceptPixelsID = (*env)->GetMethodID(env, cls, "acceptPixels", - "(IZ)V"); - JPEGImageReader_passStartedID = (*env)->GetMethodID(env, + "(IZ)V")); + CHECK_NULL(JPEGImageReader_passStartedID = (*env)->GetMethodID(env, cls, "passStarted", - "(I)V"); - JPEGImageReader_passCompleteID = (*env)->GetMethodID(env, + "(I)V")); + CHECK_NULL(JPEGImageReader_passCompleteID = (*env)->GetMethodID(env, cls, "passComplete", - "()V"); - JPEGImageReader_pushBackID = (*env)->GetMethodID(env, + "()V")); + CHECK_NULL(JPEGImageReader_pushBackID = (*env)->GetMethodID(env, cls, "pushBack", - "(I)V"); - JPEGQTable_tableID = (*env)->GetFieldID(env, + "(I)V")); + CHECK_NULL(JPEGQTable_tableID = (*env)->GetFieldID(env, qTableClass, "qTable", - "[I"); - - JPEGHuffmanTable_lengthsID = (*env)->GetFieldID(env, + "[I")); + + CHECK_NULL(JPEGHuffmanTable_lengthsID = (*env)->GetFieldID(env, huffClass, "lengths", - "[S"); - - JPEGHuffmanTable_valuesID = (*env)->GetFieldID(env, + "[S")); + + CHECK_NULL(JPEGHuffmanTable_valuesID = (*env)->GetFieldID(env, huffClass, "values", - "[S"); + "[S")); } JNIEXPORT jlong JNICALL @@ -1540,9 +1546,9 @@ /* set up the association to persist for future calls */ ret = initImageioData(env, (j_common_ptr) cinfo, this); if (ret == NULL) { - JNU_ThrowByName( env, - "java/lang/OutOfMemoryError", - "Initializing Reader"); + (*env)->ExceptionClear(env); + JNU_ThrowByName(env, "java/lang/OutOfMemoryError", + "Initializing Reader"); imageio_dispose((j_common_ptr)cinfo); return 0; } @@ -1637,6 +1643,7 @@ #endif if (GET_ARRAYS(env, data, &src->next_input_byte) == NOT_OK) { + (*env)->ExceptionClear(env); JNU_ThrowByName(env, "javax/imageio/IIOException", "Array pin failed"); @@ -1900,6 +1907,7 @@ body = (*env)->GetIntArrayElements(env, srcBands, NULL); if (body == NULL) { + (*env)->ExceptionClear(env); JNU_ThrowByName( env, "java/lang/OutOfMemoryError", "Initializing Read"); @@ -1958,6 +1966,7 @@ } if (GET_ARRAYS(env, data, &src->next_input_byte) == NOT_OK) { + (*env)->ExceptionClear(env); JNU_ThrowByName(env, "javax/imageio/IIOException", "Array pin failed"); @@ -2403,44 +2412,39 @@ jclass qTableClass, jclass huffClass) { - JPEGImageWriter_writeOutputDataID = (*env)->GetMethodID(env, + CHECK_NULL(JPEGImageWriter_writeOutputDataID = (*env)->GetMethodID(env, cls, "writeOutputData", - "([BII)V"); - - JPEGImageWriter_warningOccurredID = (*env)->GetMethodID(env, + "([BII)V")); + CHECK_NULL(JPEGImageWriter_warningOccurredID = (*env)->GetMethodID(env, cls, "warningOccurred", - "(I)V"); - JPEGImageWriter_warningWithMessageID = - (*env)->GetMethodID(env, - cls, - "warningWithMessage", - "(Ljava/lang/String;)V"); - - JPEGImageWriter_writeMetadataID = (*env)->GetMethodID(env, + "(I)V")); + CHECK_NULL(JPEGImageWriter_warningWithMessageID = + (*env)->GetMethodID(env, + cls, + "warningWithMessage", + "(Ljava/lang/String;)V")); + CHECK_NULL(JPEGImageWriter_writeMetadataID = (*env)->GetMethodID(env, cls, "writeMetadata", - "()V"); - JPEGImageWriter_grabPixelsID = (*env)->GetMethodID(env, + "()V")); + CHECK_NULL(JPEGImageWriter_grabPixelsID = (*env)->GetMethodID(env, cls, "grabPixels", - "(I)V"); - - JPEGQTable_tableID = (*env)->GetFieldID(env, + "(I)V")); + CHECK_NULL(JPEGQTable_tableID = (*env)->GetFieldID(env, qTableClass, "qTable", - "[I"); - - JPEGHuffmanTable_lengthsID = (*env)->GetFieldID(env, + "[I")); + CHECK_NULL(JPEGHuffmanTable_lengthsID = (*env)->GetFieldID(env, huffClass, "lengths", - "[S"); - - JPEGHuffmanTable_valuesID = (*env)->GetFieldID(env, + "[S")); + CHECK_NULL(JPEGHuffmanTable_valuesID = (*env)->GetFieldID(env, huffClass, "values", - "[S"); + "[S")); } JNIEXPORT jlong JNICALL @@ -2516,6 +2520,7 @@ /* set up the association to persist for future calls */ ret = initImageioData(env, (j_common_ptr) cinfo, this); if (ret == NULL) { + (*env)->ExceptionClear(env); JNU_ThrowByName( env, "java/lang/OutOfMemoryError", "Initializing Writer"); @@ -2593,6 +2598,7 @@ if (GET_ARRAYS(env, data, (const JOCTET **)(&dest->next_output_byte)) == NOT_OK) { + (*env)->ExceptionClear(env); JNU_ThrowByName(env, "javax/imageio/IIOException", "Array pin failed"); @@ -2664,6 +2670,7 @@ imageIODataPtr data = (imageIODataPtr)jlong_to_ptr(ptr); j_compress_ptr cinfo; UINT8** scale = NULL; + boolean success = TRUE; /* verify the inputs */ @@ -2708,13 +2715,14 @@ } bandSize = (*env)->GetIntArrayElements(env, bandSizes, NULL); + CHECK_NULL_RETURN(bandSize, JNI_FALSE); for (i = 0; i < numBands; i++) { if (bandSize[i] <= 0 || bandSize[i] > JPEG_BAND_SIZE) { (*env)->ReleaseIntArrayElements(env, bandSizes, bandSize, JNI_ABORT); JNU_ThrowByName(env, "javax/imageio/IIOException", "Invalid Image"); - return JNI_FALSE;; + return JNI_FALSE; } } @@ -2820,30 +2828,30 @@ vfactors = (*env)->GetIntArrayElements(env, VsamplingFactors, NULL); qsels = (*env)->GetIntArrayElements(env, QtableSelectors, NULL); - if ((ids == NULL) || - (hfactors == NULL) || (vfactors == NULL) || - (qsels == NULL)) { - JNU_ThrowByName( env, - "java/lang/OutOfMemoryError", - "Writing JPEG"); - return JNI_FALSE; + if (ids && hfactors && vfactors && qsels) { + for (i = 0; i < numBands; i++) { + cinfo->comp_info[i].component_id = ids[i]; + cinfo->comp_info[i].h_samp_factor = hfactors[i]; + cinfo->comp_info[i].v_samp_factor = vfactors[i]; + cinfo->comp_info[i].quant_tbl_no = qsels[i]; + } + } else { + success = FALSE; } - for (i = 0; i < numBands; i++) { - cinfo->comp_info[i].component_id = ids[i]; - cinfo->comp_info[i].h_samp_factor = hfactors[i]; - cinfo->comp_info[i].v_samp_factor = vfactors[i]; - cinfo->comp_info[i].quant_tbl_no = qsels[i]; + if (ids) { + (*env)->ReleaseIntArrayElements(env, componentIds, ids, JNI_ABORT); + } + if (hfactors) { + (*env)->ReleaseIntArrayElements(env, HsamplingFactors, hfactors, JNI_ABORT); } - - (*env)->ReleaseIntArrayElements(env, componentIds, - ids, JNI_ABORT); - (*env)->ReleaseIntArrayElements(env, HsamplingFactors, - hfactors, JNI_ABORT); - (*env)->ReleaseIntArrayElements(env, VsamplingFactors, - vfactors, JNI_ABORT); - (*env)->ReleaseIntArrayElements(env, QtableSelectors, - qsels, JNI_ABORT); + if (vfactors) { + (*env)->ReleaseIntArrayElements(env, VsamplingFactors, vfactors, JNI_ABORT); + } + if (qsels) { + (*env)->ReleaseIntArrayElements(env, QtableSelectors, qsels, JNI_ABORT); + } + if (!success) return data->abortFlag; jpeg_suppress_tables(cinfo, TRUE); // Disable writing any current @@ -2860,6 +2868,7 @@ if (GET_ARRAYS(env, data, (const JOCTET **)(&dest->next_output_byte)) == NOT_OK) { + (*env)->ExceptionClear(env); JNU_ThrowByName(env, "javax/imageio/IIOException", "Array pin failed"); @@ -2894,6 +2903,7 @@ cinfo->scan_info = cinfo->script_space; scanptr = (int *) cinfo->script_space; scanData = (*env)->GetIntArrayElements(env, scanInfo, NULL); + CHECK_NULL_RETURN(scanData, data->abortFlag); // number of jints per scan is 9 // We avoid a memcpy to handle different size ints for (i = 0; i < numScans*9; i++) { diff -r d127560ad6ff -r 986500b85859 src/share/native/sun/awt/image/jpeg/jpegdecoder.c --- a/src/share/native/sun/awt/image/jpeg/jpegdecoder.c Fri Feb 14 10:14:11 2014 -0800 +++ b/src/share/native/sun/awt/image/jpeg/jpegdecoder.c Tue Jul 11 21:06:17 2017 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2014, 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 @@ -467,14 +467,14 @@ Java_sun_awt_image_JPEGImageDecoder_initIDs(JNIEnv *env, jclass cls, jclass InputStreamClass) { - sendHeaderInfoID = (*env)->GetMethodID(env, cls, "sendHeaderInfo", - "(IIZZZ)Z"); - sendPixelsByteID = (*env)->GetMethodID(env, cls, "sendPixels", "([BI)Z"); - sendPixelsIntID = (*env)->GetMethodID(env, cls, "sendPixels", "([II)Z"); - InputStream_readID = (*env)->GetMethodID(env, InputStreamClass, - "read", "([BII)I"); - InputStream_availableID = (*env)->GetMethodID(env, InputStreamClass, - "available", "()I"); + CHECK_NULL(sendHeaderInfoID = (*env)->GetMethodID(env, cls, "sendHeaderInfo", + "(IIZZZ)Z")); + CHECK_NULL(sendPixelsByteID = (*env)->GetMethodID(env, cls, "sendPixels", "([BI)Z")); + CHECK_NULL(sendPixelsIntID = (*env)->GetMethodID(env, cls, "sendPixels", "([II)Z")); + CHECK_NULL(InputStream_readID = (*env)->GetMethodID(env, InputStreamClass, + "read", "([BII)I")); + CHECK_NULL(InputStream_availableID = (*env)->GetMethodID(env, InputStreamClass, + "available", "()I")); }