提交 f02e7533 编写于 作者: P pchelko

8030787: [Parfait] JNI-related warnings from b119 for jdk/src/share/native/sun/awt/image

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