mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-15 04:45:25 +00:00
8030993: Check jdk/src/share/native/common/jni_util.c for JNI pending exceptions
Check for pending exceptions Reviewed-by: alanb, chegar
This commit is contained in:
parent
adeedfee16
commit
5804adca86
@ -626,10 +626,14 @@ initializeEncoding(JNIEnv *env)
|
||||
{
|
||||
jstring propname = 0;
|
||||
jstring enc = 0;
|
||||
jclass strClazz = NULL;
|
||||
|
||||
if ((*env)->EnsureLocalCapacity(env, 3) < 0)
|
||||
return;
|
||||
|
||||
strClazz = JNU_ClassString(env);
|
||||
CHECK_NULL(strClazz);
|
||||
|
||||
propname = (*env)->NewStringUTF(env, "sun.jnu.encoding");
|
||||
if (propname) {
|
||||
jboolean exc;
|
||||
@ -683,9 +687,10 @@ initializeEncoding(JNIEnv *env)
|
||||
(*env)->DeleteLocalRef(env, enc);
|
||||
|
||||
/* Initialize method-id cache */
|
||||
String_getBytes_ID = (*env)->GetMethodID(env, JNU_ClassString(env),
|
||||
String_getBytes_ID = (*env)->GetMethodID(env, strClazz,
|
||||
"getBytes", "(Ljava/lang/String;)[B");
|
||||
String_init_ID = (*env)->GetMethodID(env, JNU_ClassString(env),
|
||||
CHECK_NULL(String_getBytes_ID);
|
||||
String_init_ID = (*env)->GetMethodID(env, strClazz,
|
||||
"<init>", "([BLjava/lang/String;)V");
|
||||
}
|
||||
|
||||
@ -720,8 +725,10 @@ JNU_NewStringPlatform(JNIEnv *env, const char *str)
|
||||
jbyteArray hab = 0;
|
||||
int len;
|
||||
|
||||
if (fastEncoding == NO_ENCODING_YET)
|
||||
if (fastEncoding == NO_ENCODING_YET) {
|
||||
initializeEncoding(env);
|
||||
JNU_CHECK_EXCEPTION_RETURN(env, NULL);
|
||||
}
|
||||
|
||||
if ((fastEncoding == FAST_8859_1) || (fastEncoding == NO_ENCODING_YET))
|
||||
return newString8859_1(env, str);
|
||||
@ -736,9 +743,11 @@ JNU_NewStringPlatform(JNIEnv *env, const char *str)
|
||||
len = (int)strlen(str);
|
||||
hab = (*env)->NewByteArray(env, len);
|
||||
if (hab != 0) {
|
||||
jclass strClazz = JNU_ClassString(env);
|
||||
CHECK_NULL_RETURN(strClazz, 0);
|
||||
(*env)->SetByteArrayRegion(env, hab, 0, len, (jbyte *)str);
|
||||
if (jnuEncodingSupported(env)) {
|
||||
result = (*env)->NewObject(env, JNU_ClassString(env),
|
||||
result = (*env)->NewObject(env, strClazz,
|
||||
String_init_ID, hab, jnuEncoding);
|
||||
} else {
|
||||
/*If the encoding specified in sun.jnu.encoding is not endorsed
|
||||
@ -747,9 +756,11 @@ JNU_NewStringPlatform(JNIEnv *env, const char *str)
|
||||
StringCoding class will pickup the iso-8859-1 as the fallback
|
||||
converter for us.
|
||||
*/
|
||||
jmethodID mid = (*env)->GetMethodID(env, JNU_ClassString(env),
|
||||
jmethodID mid = (*env)->GetMethodID(env, strClazz,
|
||||
"<init>", "([B)V");
|
||||
result = (*env)->NewObject(env, JNU_ClassString(env), mid, hab);
|
||||
if (mid != NULL) {
|
||||
result = (*env)->NewObject(env, strClazz, mid, hab);
|
||||
}
|
||||
}
|
||||
(*env)->DeleteLocalRef(env, hab);
|
||||
return result;
|
||||
@ -775,8 +786,10 @@ JNU_GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy)
|
||||
if (isCopy)
|
||||
*isCopy = JNI_TRUE;
|
||||
|
||||
if (fastEncoding == NO_ENCODING_YET)
|
||||
if (fastEncoding == NO_ENCODING_YET) {
|
||||
initializeEncoding(env);
|
||||
JNU_CHECK_EXCEPTION_RETURN(env, 0);
|
||||
}
|
||||
|
||||
if ((fastEncoding == FAST_8859_1) || (fastEncoding == NO_ENCODING_YET))
|
||||
return getString8859_1Chars(env, jstr);
|
||||
@ -791,9 +804,14 @@ JNU_GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy)
|
||||
if (jnuEncodingSupported(env)) {
|
||||
hab = (*env)->CallObjectMethod(env, jstr, String_getBytes_ID, jnuEncoding);
|
||||
} else {
|
||||
jmethodID mid = (*env)->GetMethodID(env, JNU_ClassString(env),
|
||||
"getBytes", "()[B");
|
||||
hab = (*env)->CallObjectMethod(env, jstr, mid);
|
||||
jmethodID mid;
|
||||
jclass strClazz = JNU_ClassString(env);
|
||||
CHECK_NULL_RETURN(strClazz, 0);
|
||||
mid = (*env)->GetMethodID(env, strClazz,
|
||||
"getBytes", "()[B");
|
||||
if (mid != NULL) {
|
||||
hab = (*env)->CallObjectMethod(env, jstr, mid);
|
||||
}
|
||||
}
|
||||
|
||||
if (!(*env)->ExceptionCheck(env)) {
|
||||
@ -842,6 +860,7 @@ JNU_ClassString(JNIEnv *env)
|
||||
if ((*env)->EnsureLocalCapacity(env, 1) < 0)
|
||||
return 0;
|
||||
c = (*env)->FindClass(env, "java/lang/String");
|
||||
CHECK_NULL_RETURN(c, NULL);
|
||||
cls = (*env)->NewGlobalRef(env, c);
|
||||
(*env)->DeleteLocalRef(env, c);
|
||||
}
|
||||
@ -857,6 +876,7 @@ JNU_ClassClass(JNIEnv *env)
|
||||
if ((*env)->EnsureLocalCapacity(env, 1) < 0)
|
||||
return 0;
|
||||
c = (*env)->FindClass(env, "java/lang/Class");
|
||||
CHECK_NULL_RETURN(c, NULL);
|
||||
cls = (*env)->NewGlobalRef(env, c);
|
||||
(*env)->DeleteLocalRef(env, c);
|
||||
}
|
||||
@ -872,6 +892,7 @@ JNU_ClassObject(JNIEnv *env)
|
||||
if ((*env)->EnsureLocalCapacity(env, 1) < 0)
|
||||
return 0;
|
||||
c = (*env)->FindClass(env, "java/lang/Object");
|
||||
CHECK_NULL_RETURN(c, NULL);
|
||||
cls = (*env)->NewGlobalRef(env, c);
|
||||
(*env)->DeleteLocalRef(env, c);
|
||||
}
|
||||
@ -887,6 +908,7 @@ JNU_ClassThrowable(JNIEnv *env)
|
||||
if ((*env)->EnsureLocalCapacity(env, 1) < 0)
|
||||
return 0;
|
||||
c = (*env)->FindClass(env, "java/lang/Throwable");
|
||||
CHECK_NULL_RETURN(c, NULL);
|
||||
cls = (*env)->NewGlobalRef(env, c);
|
||||
(*env)->DeleteLocalRef(env, c);
|
||||
}
|
||||
@ -936,8 +958,11 @@ JNU_Equals(JNIEnv *env, jobject object1, jobject object2)
|
||||
{
|
||||
static jmethodID mid = NULL;
|
||||
if (mid == NULL) {
|
||||
mid = (*env)->GetMethodID(env, JNU_ClassObject(env), "equals",
|
||||
jclass objClazz = JNU_ClassObject(env);
|
||||
CHECK_NULL_RETURN(objClazz, JNI_FALSE);
|
||||
mid = (*env)->GetMethodID(env, objClazz, "equals",
|
||||
"(Ljava/lang/Object;)Z");
|
||||
CHECK_NULL_RETURN(mid, JNI_FALSE);
|
||||
}
|
||||
return (*env)->CallBooleanMethod(env, object1, mid, object2);
|
||||
}
|
||||
@ -1039,7 +1064,9 @@ JNU_PrintClass(JNIEnv *env, char* hdr, jobject object)
|
||||
} else {
|
||||
jclass cls = (*env)->GetObjectClass(env, object);
|
||||
jstring clsName = JNU_ToString(env, cls);
|
||||
JNU_PrintString(env, hdr, clsName);
|
||||
if (clsName == NULL) {
|
||||
JNU_PrintString(env, hdr, clsName);
|
||||
}
|
||||
(*env)->DeleteLocalRef(env, cls);
|
||||
(*env)->DeleteLocalRef(env, clsName);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user