8025309: [parfait] JNI-related warnings from b107 for jdk.src.share.native.sun.java2d.pipe
Reviewed-by: prr, jgodinez
diff --git a/src/share/native/sun/java2d/pipe/BufferedRenderPipe.c b/src/share/native/sun/java2d/pipe/BufferedRenderPipe.c
index 62cc5ef..849fd2a 100644
--- a/src/share/native/sun/java2d/pipe/BufferedRenderPipe.c
+++ b/src/share/native/sun/java2d/pipe/BufferedRenderPipe.c
@@ -53,6 +53,7 @@
unsigned char *bbuf;
jint *ibuf;
jint ipos;
+ jboolean hasException;
J2dTraceLn2(J2D_TRACE_INFO,
"BufferedRenderPipe_fillSpans: bpos=%d limit=%d",
@@ -104,7 +105,10 @@
ibuf[1] = spanCount;
// flush the queue
- JNU_CallMethodByName(env, NULL, rq, "flushNow", "(I)V", bpos);
+ JNU_CallMethodByName(env, &hasException, rq, "flushNow", "(I)V", bpos);
+ if (hasException) {
+ break;
+ }
// now start a new operation
ibuf = (jint *)bbuf;
diff --git a/src/share/native/sun/java2d/pipe/Region.c b/src/share/native/sun/java2d/pipe/Region.c
index 97c682c..4bafa10 100644
--- a/src/share/native/sun/java2d/pipe/Region.c
+++ b/src/share/native/sun/java2d/pipe/Region.c
@@ -260,6 +260,10 @@
/* return; REMIND: What to do here? */
}
Region_StartIteration(env, &clipInfo);
+ if ((*env)->ExceptionCheck(env)) {
+ return 0;
+ }
+
numrects = Region_CountIterationRects(&clipInfo);
if ((unsigned long)numrects > initialBufferSize) {
*pRect = (RECT_T *) SAFE_SIZE_ARRAY_ALLOC(malloc, numrects, sizeof(RECT_T));
diff --git a/src/share/native/sun/java2d/pipe/ShapeSpanIterator.c b/src/share/native/sun/java2d/pipe/ShapeSpanIterator.c
index e858027..2462307 100644
--- a/src/share/native/sun/java2d/pipe/ShapeSpanIterator.c
+++ b/src/share/native/sun/java2d/pipe/ShapeSpanIterator.c
@@ -653,12 +653,15 @@
pd->curx = x;
pd->cury = y;
}
+ (*env)->ReleasePrimitiveArrayCritical(env, yArray,
+ yPoints, JNI_ABORT);
}
- (*env)->ReleasePrimitiveArrayCritical(env, yArray,
- yPoints, JNI_ABORT);
+ (*env)->ReleasePrimitiveArrayCritical(env, xArray,
+ xPoints, JNI_ABORT);
}
- (*env)->ReleasePrimitiveArrayCritical(env, xArray,
- xPoints, JNI_ABORT);
+ if (xPoints == NULL || yPoints == NULL) {
+ return;
+ }
}
if (!oom) {
HANDLEENDPATH(pd, {oom = JNI_TRUE;});
diff --git a/src/share/native/sun/java2d/pipe/SpanClipRenderer.c b/src/share/native/sun/java2d/pipe/SpanClipRenderer.c
index ad53574..2b5190f 100644
--- a/src/share/native/sun/java2d/pipe/SpanClipRenderer.c
+++ b/src/share/native/sun/java2d/pipe/SpanClipRenderer.c
@@ -44,21 +44,27 @@
{
/* Region fields */
pBandsArrayID = (*env)->GetFieldID(env, rc, "bands", "[I");
+ if (pBandsArrayID == NULL) {
+ return;
+ }
pEndIndexID = (*env)->GetFieldID(env, rc, "endIndex", "I");
+ if (pEndIndexID == NULL) {
+ return;
+ }
/* RegionIterator fields */
pRegionID = (*env)->GetFieldID(env, ric, "region",
"Lsun/java2d/pipe/Region;");
+ if (pRegionID == NULL) {
+ return;
+ }
pCurIndexID = (*env)->GetFieldID(env, ric, "curIndex", "I");
+ if (pCurIndexID == NULL) {
+ return;
+ }
pNumXbandsID = (*env)->GetFieldID(env, ric, "numXbands", "I");
-
- if((pBandsArrayID == NULL)
- || (pEndIndexID == NULL)
- || (pRegionID == NULL)
- || (pCurIndexID == NULL)
- || (pNumXbandsID == NULL))
- {
- JNU_ThrowInternalError(env, "NULL field ID");
+ if (pNumXbandsID == NULL) {
+ return;
}
}
@@ -129,10 +135,14 @@
if ((*env)->GetArrayLength(env, boxArray) < 4) {
JNU_ThrowArrayIndexOutOfBoundsException(env, "band array");
+ return;
}
alphalen = (*env)->GetArrayLength(env, alphaTile);
box = (*env)->GetPrimitiveArrayCritical(env, boxArray, 0);
+ if (box == NULL) {
+ return;
+ }
w = box[2] - box[0];
h = box[3] - box[1];
@@ -140,9 +150,14 @@
if (alphalen < offset || (alphalen - offset) / tsize < h) {
(*env)->ReleasePrimitiveArrayCritical(env, boxArray, box, 0);
JNU_ThrowArrayIndexOutOfBoundsException(env, "alpha tile array");
+ return;
}
alpha = (*env)->GetPrimitiveArrayCritical(env, alphaTile, 0);
+ if (alpha == NULL) {
+ (*env)->ReleasePrimitiveArrayCritical(env, boxArray, box, 0);
+ return;
+ }
fill(alpha, offset, tsize, 0, 0, w, h, (jbyte) 0xff);
@@ -182,6 +197,7 @@
if ((*env)->GetArrayLength(env, boxArray) < 4) {
JNU_ThrowArrayIndexOutOfBoundsException(env, "band array");
+ return;
}
alphalen = (*env)->GetArrayLength(env, alphaTile);
@@ -196,6 +212,9 @@
}
box = (*env)->GetPrimitiveArrayCritical(env, boxArray, 0);
+ if (box == NULL) {
+ return;
+ }
lox = box[0];
loy = box[1];
@@ -207,10 +226,20 @@
(alphalen - offset - (hix-lox)) / tsize < (hiy - loy - 1)) {
(*env)->ReleasePrimitiveArrayCritical(env, boxArray, box, 0);
JNU_ThrowArrayIndexOutOfBoundsException(env, "alpha tile array");
+ return;
}
bands = (*env)->GetPrimitiveArrayCritical(env, bandsArray, 0);
+ if (bands == NULL) {
+ (*env)->ReleasePrimitiveArrayCritical(env, boxArray, box, 0);
+ return;
+ }
alpha = (*env)->GetPrimitiveArrayCritical(env, alphaTile, 0);
+ if (alpha == NULL) {
+ (*env)->ReleasePrimitiveArrayCritical(env, bandsArray, bands, 0);
+ (*env)->ReleasePrimitiveArrayCritical(env, boxArray, box, 0);
+ return;
+ }
curIndex = saveCurIndex;
numXbands = saveNumXbands;