RFR: 8081388: JNI exception pending in jdk/src/windows/bin/java_md.c
David Holmes
david.holmes at oracle.com
Thu Sep 1 07:33:58 UTC 2016
On 1/09/2016 5:51 AM, Henry Jen wrote:
> Hi,
>
> Please review a trivial fix for 8081388, in a nutshell,
>
> - Return NULL from NewPlatformStringArray if an exception occurred
> - All other places call this function already handled return value NULL
> - Launcher handles exception in JavaMain, report error and exit.
>
> Cheers,
> Henry
>
> diff --git a/src/java.base/share/native/libjli/java.c b/src/java.base/share/native/libjli/java.c
> --- a/src/java.base/share/native/libjli/java.c
> +++ b/src/java.base/share/native/libjli/java.c
> @@ -1497,6 +1497,7 @@
>
> NULL_CHECK0(cls = FindBootStrapClass(env, "java/lang/String"));
> NULL_CHECK0(ary = (*env)->NewObjectArray(env, strc, cls, 0));
> + CHECK_EXCEPTION_RETURN_VALUE(0);
You will only get a NULL if an exception is pending; conversely you will
only have an exception pending if the return value is NULL. The new
check will never execute in a "positive way" and is unnecessary.
David
-----
> for (i = 0; i < strc; i++) {
> jstring str = NewPlatformString(env, *strv++);
> NULL_CHECK0(str);
> diff --git a/src/java.base/share/native/libjli/java.h b/src/java.base/share/native/libjli/java.h
> --- a/src/java.base/share/native/libjli/java.h
> +++ b/src/java.base/share/native/libjli/java.h
> @@ -253,6 +253,13 @@
> #define NULL_CHECK(NC_check_pointer) \
> NULL_CHECK_RETURN_VALUE(NC_check_pointer, )
>
> +#define CHECK_EXCEPTION_RETURN_VALUE(CER_value) \
> + do { \
> + if ((*env)->ExceptionOccurred(env)) { \
> + return CER_value; \
> + } \
> + } while (JNI_FALSE)
> +
> #define CHECK_EXCEPTION_RETURN() \
> do { \
> if ((*env)->ExceptionOccurred(env)) { \
>
More information about the core-libs-dev
mailing list