Return-Path: X-Original-To: apmail-commons-commits-archive@minotaur.apache.org Delivered-To: apmail-commons-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1C05E9613 for ; Fri, 4 Nov 2011 12:52:31 +0000 (UTC) Received: (qmail 94420 invoked by uid 500); 4 Nov 2011 12:52:30 -0000 Delivered-To: apmail-commons-commits-archive@commons.apache.org Received: (qmail 94362 invoked by uid 500); 4 Nov 2011 12:52:30 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 94355 invoked by uid 99); 4 Nov 2011 12:52:30 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 04 Nov 2011 12:52:30 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 04 Nov 2011 12:52:29 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 3433423889FA for ; Fri, 4 Nov 2011 12:52:09 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1197541 - in /commons/proper/daemon/trunk/src/native/windows: apps/prunsrv/prunsrv.c src/javajni.c Date: Fri, 04 Nov 2011 12:52:09 -0000 To: commits@commons.apache.org From: mturk@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111104125209.3433423889FA@eris.apache.org> Author: mturk Date: Fri Nov 4 12:52:08 2011 New Revision: 1197541 URL: http://svn.apache.org/viewvc?rev=1197541&view=rev Log: Make a code a bit safer on invalid parameters. Make sure it doesn't crash at least Modified: commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c commons/proper/daemon/trunk/src/native/windows/src/javajni.c Modified: commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c?rev=1197541&r1=1197540&r2=1197541&view=diff ============================================================================== --- commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c (original) +++ commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c Fri Nov 4 12:52:08 2011 @@ -1303,9 +1303,15 @@ void WINAPI serviceMain(DWORD argc, LPTS if (IS_VALID_STRING(SO_STARTMODE)) { if (!lstrcmpiW(SO_STARTMODE, PRSRV_JVM)) { _jni_startup = TRUE; - _jni_rclass = WideToANSI(SO_STARTCLASS); - /* Exchange all dots with slashes */ - apxStrCharReplaceA(_jni_rclass, '.', '/'); + if (IS_VALID_STRING(SO_STARTCLASS)) { + _jni_rclass = WideToANSI(SO_STARTCLASS); + /* Exchange all dots with slashes */ + apxStrCharReplaceA(_jni_rclass, '.', '/'); + } + else { + /* Presume its main */ + _jni_rclass = WideToANSI(L"Main"); + } _jni_rparam = SO_STARTPARAMS; } else if (!lstrcmpiW(SO_STARTMODE, PRSRV_JAVA)) { @@ -1345,14 +1351,14 @@ void WINAPI serviceMain(DWORD argc, LPTS if (IS_VALID_STRING(SO_STOPMODE)) { if (!lstrcmpiW(SO_STOPMODE, PRSRV_JVM)) { _jni_shutdown = TRUE; - _jni_sclass = WideToANSI(SO_STOPCLASS); if (IS_VALID_STRING(SO_STOPCLASS)) { + _jni_sclass = WideToANSI(SO_STOPCLASS); apxStrCharReplaceA(_jni_sclass, '.', '/'); - _jni_sparam = SO_STOPPARAMS; } else { - _jni_sclass = "java/lang/System"; + _jni_sclass = WideToANSI(L"java/lang/System"); } + _jni_sparam = SO_STOPPARAMS; } else if (!lstrcmpiW(SO_STOPMODE, PRSRV_JAVA)) { LPWSTR jx = NULL, szJH = SO_JAVAHOME; Modified: commons/proper/daemon/trunk/src/native/windows/src/javajni.c URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/windows/src/javajni.c?rev=1197541&r1=1197540&r2=1197541&view=diff ============================================================================== --- commons/proper/daemon/trunk/src/native/windows/src/javajni.c (original) +++ commons/proper/daemon/trunk/src/native/windows/src/javajni.c Fri Nov 4 12:52:08 2011 @@ -792,8 +792,18 @@ apxJavaLoadMainClass(APXHANDLE hJava, LP if (hJava->dwType != APXHANDLE_TYPE_JVM) return FALSE; lpJava = APXHANDLE_DATA(hJava); - if (!__apxJvmAttach(lpJava)) + if (!lpJava) return FALSE; + if (IS_EMPTY_STRING(szMethodName)) + szMethodName = "main"; + if (lstrcmpA(szClassName, "java/lang/System") == 0) { + /* Usable only for exit method, so force */ + szSignature = "(I)V"; + szMethodName = "exit"; + } + lstrlcpyA(lpJava->clWorker.sClazz, 1024, szClassName); + lstrlcpyA(lpJava->clWorker.sMethod, 512, szMethodName); + jClazz = JNICALL_1(FindClass, JAVA_CLASSSTRING); if (!jClazz) { JVM_EXCEPTION_CLEAR(lpJava); @@ -802,7 +812,6 @@ apxJavaLoadMainClass(APXHANDLE hJava, LP } lpJava->clString.jClazz = JNICALL_1(NewGlobalRef, jClazz); JNI_LOCAL_UNREF(jClazz); - /* Find the class */ jClazz = JNICALL_1(FindClass, szClassName); if (!jClazz) { @@ -814,15 +823,6 @@ apxJavaLoadMainClass(APXHANDLE hJava, LP lpJava->clWorker.jClazz = JNICALL_1(NewGlobalRef, jClazz); JNI_LOCAL_UNREF(jClazz); - if (!szMethodName) - szMethodName = "main"; - if (lstrcmpA(szClassName, "java/lang/System") == 0) { - /* Usable only for exit method, so force */ - szSignature = "(I)V"; - szMethodName = "exit"; - } - lstrlcpyA(lpJava->clWorker.sClazz, 1024, szClassName); - lstrlcpyA(lpJava->clWorker.sMethod, 512, szMethodName); lpJava->clWorker.jMethod = JNICALL_3(GetStaticMethodID, lpJava->clWorker.jClazz, szMethodName, szSignature); @@ -855,16 +855,18 @@ apxJavaLoadMainClass(APXHANDLE hJava, LP */ static DWORD WINAPI __apxJavaWorkerThread(LPVOID lpParameter) { -#define WORKER_EXIT(x) { rv = x; goto finished; } +#define WORKER_EXIT(x) do { rv = x; goto finished; } while(0) DWORD rv = 0; - LPAPXJAVAVM lpJava; + LPAPXJAVAVM lpJava = NULL; LPAPXJAVA_THREADARGS pArgs = (LPAPXJAVA_THREADARGS)lpParameter; APXHANDLE hJava; - hJava = (APXHANDLE)pArgs->hJava; + hJava = (APXHANDLE)pArgs->hJava; if (hJava->dwType != APXHANDLE_TYPE_JVM) WORKER_EXIT(1); - + lpJava = APXHANDLE_DATA(pArgs->hJava); + if (!lpJava) + WORKER_EXIT(1); if (!apxJavaInitialize(pArgs->hJava, pArgs->szClassPath, pArgs->lpOptions, @@ -882,17 +884,16 @@ static DWORD WINAPI __apxJavaWorkerThrea pArgs->szClassName, pArgs->szMethodName, pArgs->lpArguments)) { - WORKER_EXIT(2); + WORKER_EXIT(3); } apxJavaSetOut(pArgs->hJava, TRUE, pArgs->szStdErrFilename); apxJavaSetOut(pArgs->hJava, FALSE, pArgs->szStdOutFilename); - lpJava = APXHANDLE_DATA(pArgs->hJava); /* Check if we have a class and a method */ if (!lpJava->clWorker.jClazz || !lpJava->clWorker.jMethod) - WORKER_EXIT(2); + WORKER_EXIT(4); if (!__apxJvmAttach(lpJava)) - WORKER_EXIT(3); + WORKER_EXIT(5); apxLogWrite(APXLOG_MARK_DEBUG "Java Worker thread started %s:%s", lpJava->clWorker.sClazz, lpJava->clWorker.sMethod); lpJava->dwWorkerStatus = 1; @@ -902,26 +903,30 @@ static DWORD WINAPI __apxJavaWorkerThrea lpJava->clWorker.jMethod, lpJava->clWorker.jArgs); if (JVM_EXCEPTION_CHECK(lpJava)) { - WORKER_EXIT(4); + WORKER_EXIT(6); } else { __apxJvmDetach(lpJava); } finished: - lpJava->dwWorkerStatus = 0; - apxLogWrite(APXLOG_MARK_DEBUG "Java Worker thread finished %s:%s with status=%d", - lpJava->clWorker.sClazz, lpJava->clWorker.sMethod, rv); - SetEvent(lpJava->hWorkerSync); + if (lpJava) { + lpJava->dwWorkerStatus = 0; + apxLogWrite(APXLOG_MARK_DEBUG "Java Worker thread finished %s:%s with status=%d", + lpJava->clWorker.sClazz, lpJava->clWorker.sMethod, rv); + SetEvent(lpJava->hWorkerSync); + } ExitThread(rv); /* never gets here but keep the compiler happy */ - return 0; + return rv; } +BOOL apxJavaStart(LPAPXJAVA_THREADARGS pArgs) { - LPAPXJAVAVM lpJava; lpJava = APXHANDLE_DATA(pArgs->hJava); + if (!lpJava) + return FALSE; lpJava->dwWorkerStatus = 0; lpJava->hWorkerSync = CreateEvent(NULL, FALSE, FALSE, NULL); lpJava->hWorkerThread = CreateThread(NULL, @@ -936,6 +941,8 @@ apxJavaStart(LPAPXJAVA_THREADARGS pArgs) ResumeThread(lpJava->hWorkerThread); /* Wait until the worker thread initializes */ WaitForSingleObject(lpJava->hWorkerSync, INFINITE); + if (lpJava->dwWorkerStatus == 0) + return FALSE; if (lstrcmpA(lpJava->clWorker.sClazz, "java/lang/System")) { /* Give some time to initialize the thread * Unless we are calling System.exit(0).