--- old/src/share/bin/java.c Mon May 6 16:05:41 2013 +++ new/src/share/bin/java.c Mon May 6 16:05:41 2013 @@ -149,12 +149,15 @@ static void FreeKnownVMs(); static jboolean IsWildCardEnabled(); -#define ARG_CHECK(n, f, a) if (n < 1) { \ - JLI_ReportErrorMessage(f, a); \ - printUsage = JNI_TRUE; \ - *pret = 1; \ - return JNI_TRUE; \ -} +#define ARG_CHECK(AC_arg_count, AC_failure_message, AC_questionable_arg) \ + do { \ + if (AC_arg_count < 1) { \ + JLI_ReportErrorMessage(AC_failure_message, AC_questionable_arg); \ + printUsage = JNI_TRUE; \ + *pret = 1; \ + return JNI_TRUE; \ + } \ + } while (JNI_FALSE) /* * Running Java code in primordial thread caused many problems. We will @@ -310,29 +313,37 @@ * mainThread.isAlive() to work as expected. */ #define LEAVE() \ - if ((*vm)->DetachCurrentThread(vm) != 0) { \ - JLI_ReportErrorMessage(JVM_ERROR2); \ - ret = 1; \ - } \ - (*vm)->DestroyJavaVM(vm); \ - return ret \ + do { \ + if ((*vm)->DetachCurrentThread(vm) != JNI_OK) { \ + JLI_ReportErrorMessage(JVM_ERROR2); \ + ret = 1; \ + } \ + if (JNI_TRUE) { \ + (*vm)->DestroyJavaVM(vm); \ + return ret; \ + } \ + } while (JNI_FALSE) -#define CHECK_EXCEPTION_NULL_LEAVE(e) \ - if ((*env)->ExceptionOccurred(env)) { \ - JLI_ReportExceptionDescription(env); \ - LEAVE(); \ - } \ - if ((e) == NULL) { \ - JLI_ReportErrorMessage(JNI_ERROR); \ - LEAVE(); \ - } +#define CHECK_EXCEPTION_NULL_LEAVE(CENL_exception) \ + do { \ + if ((*env)->ExceptionOccurred(env)) { \ + JLI_ReportExceptionDescription(env); \ + LEAVE(); \ + } \ + if ((CENL_exception) == NULL) { \ + JLI_ReportErrorMessage(JNI_ERROR); \ + LEAVE(); \ + } \ + } while (JNI_FALSE) -#define CHECK_EXCEPTION_LEAVE(rv) \ - if ((*env)->ExceptionOccurred(env)) { \ - JLI_ReportExceptionDescription(env); \ - ret = (rv); \ - LEAVE(); \ - } +#define CHECK_EXCEPTION_LEAVE(CEL_return_value) \ + do { \ + if ((*env)->ExceptionOccurred(env)) { \ + JLI_ReportExceptionDescription(env); \ + ret = (CEL_return_value); \ + LEAVE(); \ + } \ + } while (JNI_FALSE) int JNICALL JavaMain(void * _args) @@ -434,7 +445,7 @@ * consistent in the UI we need to track and report the application main class. */ appClass = GetApplicationClass(env); - NULL_CHECK_RV(appClass, -1); + NULL_CHECK_RETURN_VALUE(appClass, -1); /* * PostJVMInit uses the class name as the application name for GUI purposes, * for example, on OSX this sets the application name in the menu bar for --- old/src/share/bin/java.h Mon May 6 16:05:45 2013 +++ new/src/share/bin/java.h Mon May 6 16:05:44 2013 @@ -242,13 +242,18 @@ InvocationFunctions ifn; } JavaMainArgs; -#define NULL_CHECK_RV(e, rv) if ((e) == 0) { \ - JLI_ReportErrorMessage(JNI_ERROR); \ - return rv; \ - } +#define NULL_CHECK_RETURN_VALUE(NCRV_check_pointer, NCRV_return_value) \ + do { \ + if ((NCRV_check_pointer) == NULL) { \ + JLI_ReportErrorMessage(JNI_ERROR); \ + return NCRV_return_value; \ + } \ + } while (JNI_FALSE) -#define NULL_CHECK0(e) NULL_CHECK_RV(e, 0) +#define NULL_CHECK0(NC0_check_pointer) \ + NULL_CHECK_RETURN_VALUE(NC0_check_pointer, 0) -#define NULL_CHECK(e) NULL_CHECK_RV(e, ) +#define NULL_CHECK(NC_check_pointer) \ + NULL_CHECK_RETURN_VALUE(NC_check_pointer, ) #endif /* _JAVA_H_ */ --- old/src/solaris/bin/jexec.c Mon May 6 16:05:47 2013 +++ new/src/solaris/bin/jexec.c Mon May 6 16:05:47 2013 @@ -91,6 +91,7 @@ static const char * CRAZY_EXEC_MSG = "missing args"; static const char * MISSING_JAVA_MSG = "can't locate java"; static const char * BAD_ARG_MSG = "incorrect number of arguments"; +static const char * MEM_FAILED_MSG = "memory allocation failed"; #ifdef __linux__ static const char * BAD_PATHNAME_MSG = "invalid path"; static const char * BAD_FILE_MSG = "invalid file"; @@ -172,9 +173,12 @@ } alen = (argc + 2) * (sizeof (const char *)); if (alen <= 0 || alen > INT_MAX / sizeof(char *)) { - errorExit(3, BAD_ARG_MSG); + errorExit(errno, BAD_ARG_MSG); } nargv = (const char **) malloc(alen); + if (nargv == NULL) { + errorExit(errno, MEM_FAILED_MSG); + } nargv[nargc++] = java; #ifdef __linux__