From 86b7f002f4dbf0637ec2693fc9cbbde15482f092 Mon Sep 17 00:00:00 2001 From: Mark Sheppard Date: Thu, 20 Mar 2014 21:14:51 +0000 Subject: [PATCH] 8036609: Check jdk/src/windows/native/java/lang/ProcessImpl_md.c for JNI pending exceptions Added ExceptionCheck fater JNI calls Reviewed-by: chegar --- .../windows/native/java/lang/ProcessImpl_md.c | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/jdk/src/windows/native/java/lang/ProcessImpl_md.c b/jdk/src/windows/native/java/lang/ProcessImpl_md.c index 6721cc16579..a432f1198dc 100644 --- a/jdk/src/windows/native/java/lang/ProcessImpl_md.c +++ b/jdk/src/windows/native/java/lang/ProcessImpl_md.c @@ -359,24 +359,28 @@ Java_java_lang_ProcessImpl_create(JNIEnv *env, jclass ignored, const jchar *penvBlock = (envBlock != NULL) ? (*env)->GetStringChars(env, envBlock, NULL) : NULL; - const jchar *pdir = (dir != NULL) - ? (*env)->GetStringChars(env, dir, NULL) - : NULL; - jlong *handles = (*env)->GetLongArrayElements(env, stdHandles, NULL); - if (handles != NULL) { - ret = processCreate( - env, - pcmd, - penvBlock, - pdir, - handles, - redirectErrorStream); - (*env)->ReleaseLongArrayElements(env, stdHandles, handles, 0); + if (!(*env)->ExceptionCheck(env)) { + const jchar *pdir = (dir != NULL) + ? (*env)->GetStringChars(env, dir, NULL) + : NULL; + if (!(*env)->ExceptionCheck(env)) { + jlong *handles = (*env)->GetLongArrayElements(env, stdHandles, NULL); + if (handles != NULL) { + ret = processCreate( + env, + pcmd, + penvBlock, + pdir, + handles, + redirectErrorStream); + (*env)->ReleaseLongArrayElements(env, stdHandles, handles, 0); + } + if (pdir != NULL) + (*env)->ReleaseStringChars(env, dir, pdir); + } + if (penvBlock != NULL) + (*env)->ReleaseStringChars(env, envBlock, penvBlock); } - if (pdir != NULL) - (*env)->ReleaseStringChars(env, dir, pdir); - if (penvBlock != NULL) - (*env)->ReleaseStringChars(env, envBlock, penvBlock); (*env)->ReleaseStringChars(env, cmd, pcmd); } } @@ -448,7 +452,7 @@ Java_java_lang_ProcessImpl_isProcessAlive(JNIEnv *env, jclass ignored, jlong han JNIEXPORT jboolean JNICALL Java_java_lang_ProcessImpl_closeHandle(JNIEnv *env, jclass ignored, jlong handle) { - return CloseHandle((HANDLE) handle); + return (jboolean) CloseHandle((HANDLE) handle); } /**