diff --git a/src/share/native/common/jni_util.h b/src/share/native/common/jni_util.h index 4180756fccbed53e4f3a86a5f73e3e243a8dbd2f..b8d23cd1c21341a2175694c4f59925c8c9d7d1ee 100644 --- a/src/share/native/common/jni_util.h +++ b/src/share/native/common/jni_util.h @@ -278,6 +278,38 @@ JNU_NotifyAll(JNIEnv *env, jobject object); #define IS_NULL(obj) ((obj) == NULL) #define JNU_IsNull(env,obj) ((obj) == NULL) +/************************************************************************ + * Miscellaneous utilities used by the class libraries to return from + * a function if a value is NULL or an exception is pending. + */ + +#define CHECK_NULL(x) \ + do { \ + if ((x) == NULL) { \ + return; \ + } \ + } while (0) \ + +#define CHECK_NULL_RETURN(x, y) \ + do { \ + if ((x) == NULL) { \ + return (y); \ + } \ + } while (0) \ + +#define JNU_CHECK_EXCEPTION(env) \ + do { \ + if ((*env)->ExceptionCheck(env)) { \ + return; \ + } \ + } while (0) \ + +#define JNU_CHECK_EXCEPTION_RETURN(env, y) \ + do { \ + if ((*env)->ExceptionCheck(env)) { \ + return (y); \ + } \ + } while (0) /************************************************************************ * Debugging utilities diff --git a/src/share/native/sun/misc/Version.c b/src/share/native/sun/misc/Version.c index 7edba49ff22d30424edcb7b2b899ff49a81f8167..214f4d28f38d2e6e02f99ee2cf11eaac9d53a99f 100644 --- a/src/share/native/sun/misc/Version.c +++ b/src/share/native/sun/misc/Version.c @@ -90,10 +90,15 @@ Java_sun_misc_Version_getJvmVersionInfo(JNIEnv *env, jclass cls) (*func_p)(env, &info, sizeof(info)); setStaticIntField(env, cls, "jvm_major_version", JVM_VERSION_MAJOR(info.jvm_version)); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_minor_version", JVM_VERSION_MINOR(info.jvm_version)); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_micro_version", JVM_VERSION_MICRO(info.jvm_version)); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_build_number", JVM_VERSION_BUILD(info.jvm_version)); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); setStaticIntField(env, cls, "jvm_update_version", info.update_version); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); jvm_special_version = info.special_update_version; return JNI_TRUE; @@ -116,10 +121,15 @@ Java_sun_misc_Version_getJdkVersionInfo(JNIEnv *env, jclass cls) JDK_GetVersionInfo0(&info, sizeof(info)); setStaticIntField(env, cls, "jdk_major_version", JDK_VERSION_MAJOR(info.jdk_version)); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_minor_version", JDK_VERSION_MINOR(info.jdk_version)); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_micro_version", JDK_VERSION_MICRO(info.jdk_version)); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_build_number", JDK_VERSION_BUILD(info.jdk_version)); + JNU_CHECK_EXCEPTION(env); setStaticIntField(env, cls, "jdk_update_version", info.update_version); + JNU_CHECK_EXCEPTION(env); jdk_special_version = info.special_update_version; }