diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html index 94b9138..ca29270 100644 --- a/docs/ReleaseNotes.html +++ b/docs/ReleaseNotes.html @@ -51,6 +51,10 @@ 1687419 (prelease 3) Corrected calls to AttachCurrentThread in EventProxy + + 1689061 + (prelease 4) C code changes to fix VC2003 compiler warnings. +     @@ -81,6 +85,13 @@ Identified 1.11.1 Process affinity may have to be set on dual core machines to avoid com exceptions. + + no ticket + Identified 1.11.1 Versions of JDK 1.5 prior to 1.5_10 are known to leak JNI handles. + See the Sun bug tracking system http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6399321 for more details. + + + diff --git a/jni/Dispatch.cpp b/jni/Dispatch.cpp index 0f31285..4b2a00c 100644 --- a/jni/Dispatch.cpp +++ b/jni/Dispatch.cpp @@ -322,7 +322,7 @@ static char* BasicToCharString(const BSTR inBasicString) size_t len = ::wcstombs(charString, inBasicString, charStrSize); } else - charString = ::strdup(""); + charString = ::_strdup(""); return charString; } @@ -334,7 +334,7 @@ static char* CreateErrorMsgFromResult(HRESULT inResult) FORMAT_MESSAGE_FROM_SYSTEM, NULL, inResult,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &msg, 0, NULL); if (msg == NULL) - msg = ::strdup("An unknown COM error has occured."); + msg = ::_strdup("An unknown COM error has occured."); return msg; } @@ -473,13 +473,13 @@ JNIEXPORT jobject JNICALL Java_com_jacob_com_Dispatch_invokev { jint *uAE = env->GetIntArrayElements(uArgErr, NULL); hr = pIDispatch->Invoke(dispID,IID_NULL, - lcid,wFlags,&dispparams,v,&excepInfo,(unsigned int *)uAE); + lcid,(WORD)wFlags,&dispparams,v,&excepInfo,(unsigned int *)uAE); // SF 1689061 env->ReleaseIntArrayElements(uArgErr, uAE, 0); } else { hr = pIDispatch->Invoke(dispID,IID_NULL, - lcid,wFlags,&dispparams,v,&excepInfo, NULL); + lcid,(WORD)wFlags,&dispparams,v,&excepInfo, NULL); // SF 1689061 } if (num_args) { @@ -514,7 +514,7 @@ JNIEXPORT jobject JNICALL Java_com_jacob_com_Dispatch_invokev } else { dispIdAsName = new char[256]; // get the id string - itoa (dispID,dispIdAsName,10); + _itoa (dispID,dispIdAsName,10); //continue on mostly as before buf = CreateErrorMsgFromInfo(hr,&excepInfo,dispIdAsName); } diff --git a/jni/EventProxy.cpp b/jni/EventProxy.cpp index c7b20aa..6172630 100644 --- a/jni/EventProxy.cpp +++ b/jni/EventProxy.cpp @@ -66,12 +66,12 @@ EventProxy::~EventProxy() if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();} if (vmConnectionStatus == JNI_EDETACHED){ //printf("Unhook: Attaching to current thread using JNI Version 1.2 (%d)\n",vmConnectionStatus); - JavaVMAttachArgs attachmentArgs; - attachmentArgs.version = JNI_VERSION_1_2; - attachmentArgs.name = NULL; - attachmentArgs.group = NULL; - jvm->AttachCurrentThread((void **)&env, &attachmentArgs); - if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();} + JavaVMAttachArgs attachmentArgs; + attachmentArgs.version = JNI_VERSION_1_2; + attachmentArgs.name = NULL; + attachmentArgs.group = NULL; + jvm->AttachCurrentThread((void **)&env, &attachmentArgs); + if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();} } else { // should really look for JNI_OK versus an error // started method hooked so no need to attach again @@ -144,17 +144,17 @@ STDMETHODIMP EventProxy::Invoke(DISPID dispID, REFIID riid, // attach to the current running thread //printf("Invoke: Attaching to current thread using JNI Version 1.2\n"); - JavaVMAttachArgs attachmentArgs; - attachmentArgs.version = JNI_VERSION_1_2; - attachmentArgs.name = NULL; - attachmentArgs.group = NULL; - jvm->AttachCurrentThread((void **)&env, &attachmentArgs); + JavaVMAttachArgs attachmentArgs; + attachmentArgs.version = JNI_VERSION_1_2; + attachmentArgs.name = NULL; + attachmentArgs.group = NULL; + jvm->AttachCurrentThread((void **)&env, &attachmentArgs); if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();} if (!eventMethodName) { // user did not implement this method - //printf("Invoke: didn't find method name\n"); + // printf("Invoke: didn't find method name\n"); ThrowComFail(env, "Event method received was not defined as part of callback interface", -1); // should we detatch before returning?? The old code didn't but I don't see why not. @@ -179,7 +179,7 @@ STDMETHODIMP EventProxy::Invoke(DISPID dispID, REFIID riid, if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();} //printf("Invoke: Made Variant\n"); jclass variantClass = env->GetObjectClass(aVariantObj); - if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();} + if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();} // create the variant parameter array // how many params @@ -200,7 +200,7 @@ STDMETHODIMP EventProxy::Invoke(DISPID dispID, REFIID riid, VariantCopy(va, &pDispParams->rgvarg[i]); // put it in the array env->SetObjectArrayElement(varr, j, arg); - env->DeleteLocalRef(arg); + env->DeleteLocalRef(arg); if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();} } //printf("Invoke: Filled Array\n"); @@ -215,6 +215,8 @@ STDMETHODIMP EventProxy::Invoke(DISPID dispID, REFIID riid, } if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();} // don't need the first variant we created to get the class + // SF 1689061 change not accepted but put in as comment for later reminder + //Java_com_jacob_com_Variant_release(env, aVariantObj); env->DeleteLocalRef(aVariantObj); if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();} @@ -225,17 +227,19 @@ STDMETHODIMP EventProxy::Invoke(DISPID dispID, REFIID riid, VARIANT *java = extractVariant(env, arg); VARIANT *com = &pDispParams->rgvarg[i]; convertJavaVariant(java, com); + // SF 1689061 change not accepted but put in as comment for later reminder + //Java_com_jacob_com_Variant_release(env, arg); zeroVariant(env, arg); env->DeleteLocalRef(arg); } // End code from Jiffie team that copies parameters back from java to COM // detach from thread //printf("Invoke: Detatching\n"); - jvm->DetachCurrentThread(); + jvm->DetachCurrentThread(); //fflush(stdout); return S_OK; - } - return E_NOINTERFACE; + } + return E_NOINTERFACE; } void EventProxy::convertJavaVariant(VARIANT *java, VARIANT *com) { @@ -854,4 +858,3 @@ void EventProxy::convertJavaVariant(VARIANT *java, VARIANT *com) { } } - diff --git a/jni/SafeArray.cpp b/jni/SafeArray.cpp index 9dc0b93..5fe2184 100644 --- a/jni/SafeArray.cpp +++ b/jni/SafeArray.cpp @@ -562,7 +562,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_fromStringArray // GetStringUTFChars() replaced with GetStringChars() // (Variant modified in previous report) const jchar *str = env->GetStringChars(s, NULL); - CComBSTR bs(str); + CComBSTR bs((LPCOLESTR)str); // SR cast SF 1689061 V_VT(&v) = VT_BSTR; V_BSTR(&v) = bs.Copy(); long x = i; @@ -577,7 +577,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_fromStringArray // GetStringUTFChars() replaced with GetStringChars() // (Variant modified in previous report) const jchar *str = env->GetStringChars(s, NULL); - CComBSTR bs(str); + CComBSTR bs((LPCOLESTR)str); // SR cast SF 1689061 BSTR bstr = bs.Detach(); long x = i; SafeArrayPutElement(psa,&x,bstr); @@ -962,7 +962,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_jacob_com_SafeArray_toStringArray return NULL; } BSTR bs = V_BSTR(&v); - jstring js = env->NewString(bs, SysStringLen(bs)); + jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061 env->SetObjectArrayElement(iarr, i, js); } return iarr; @@ -973,7 +973,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_jacob_com_SafeArray_toStringArray BSTR bs = NULL; long ix = i; SafeArrayGetElement(sa, &ix, (void*) &bs); - jstring js = env->NewString(bs, SysStringLen(bs)); + jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061 env->SetObjectArrayElement(iarr, i, js); } return iarr; @@ -1618,7 +1618,7 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_SafeArray_getString__I return NULL; } BSTR bs = V_BSTR(&v); - jstring js = env->NewString(bs, SysStringLen(bs)); + jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061 // jacob report 1224219 // SafeArrayGetElement memory must be freed http://www.canaimasoft.com/f90VB/OnlineManuals/Reference/TH_31.htm VariantClear(&v); @@ -1626,7 +1626,7 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_SafeArray_getString__I } else if (vt == VT_BSTR) { BSTR bs = NULL; SafeArrayGetElement(psa, &idx, &bs); - jstring js = env->NewString(bs, SysStringLen(bs)); + jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061 // jacob report 1224219 // SafeArrayGetElement memory must be freed http://www.canaimasoft.com/f90VB/OnlineManuals/Reference/TH_31.htm if (bs) SysFreeString(bs); @@ -1660,13 +1660,13 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_SafeArray_getString__II return NULL; } BSTR bs = V_BSTR(&v); - jstring js = env->NewString(bs, SysStringLen(bs)); + jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061 return js; } else if (vt == VT_BSTR) { long idx[2] = {i, j}; BSTR bs = NULL; SafeArrayGetElement(psa, idx, &bs); - jstring js = env->NewString(bs, SysStringLen(bs)); + jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061 return js; } ThrowComFail(env, "safearray cannot get string", 0); @@ -1783,7 +1783,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_getStrings return; } BSTR bs = V_BSTR(&v); - jstring js = env->NewString(bs, SysStringLen(bs)); + jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061 env->SetObjectArrayElement(ja, j, js); VariantClear(&v); } @@ -1795,7 +1795,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_getStrings { long ix = i; SafeArrayGetElement(sa, &ix, (void*) &bs); - jstring js = env->NewString(bs, SysStringLen(bs)); + jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061 env->SetObjectArrayElement(ja, j, js); } } else { @@ -2751,12 +2751,12 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_SafeArray_getString___3I return NULL; } BSTR bs = V_BSTR(&v); - jstring js = env->NewString(bs, SysStringLen(bs)); + jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061 return js; } else if (vt == VT_BSTR) { BSTR bs = NULL; SafeArrayGetElement(psa, jIndices, &bs); - jstring js = env->NewString(bs, SysStringLen(bs)); + jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061 return js; } ThrowComFail(env, "safearray cannot get string", 0); @@ -2948,4 +2948,4 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_setBoolean___3IZ } -} +} \ No newline at end of file diff --git a/jni/Variant.cpp b/jni/Variant.cpp index 1e10e65..67dae9a 100644 --- a/jni/Variant.cpp +++ b/jni/Variant.cpp @@ -87,7 +87,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_Variant_init * Method: zeroVariant * Signature: ()V * - * This should only be used on variant objects created by teh + * This should only be used on variant objects created by the * com layer as part of a call through EventProxy. * This zeros out the variant pointer in the Variant object * so that the calling COM program can free the memory. @@ -272,7 +272,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_Variant_putVariantStringRef // Unicode string (no terminating NULL) provided by GetStringChars const jsize numChars = env->GetStringLength(s); //CComBSTR bs(cStr); - CComBSTR bs( numChars, cStr ); + CComBSTR bs( numChars, (LPCOLESTR)cStr ); // SR cast SF 1689061 BSTR *pbs = (BSTR *)CoTaskMemAlloc(sizeof(BSTR)); bs.CopyTo(pbs); @@ -367,7 +367,7 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_Variant_getVariantStringRef return NULL; } BSTR *bs = V_BSTRREF(v); - jstring js = env->NewString(*bs, SysStringLen(*bs)); + jstring js = env->NewString((jchar*)*bs, SysStringLen(*bs)); // SR cast SF 1689061 return js; } return NULL; @@ -656,7 +656,7 @@ JNIEXPORT jlong JNICALL Java_com_jacob_com_Variant_getVariantCurrency CY cy; cy = V_CY(v); jlong jl; - memcpy(&jl, &cy, 64); + memcpy(&jl, &cy, 8); // was 64. should be sizeof(x) SF 1689061 return jl; } return NULL; @@ -683,7 +683,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_Variant_putVariantCurrencyRef if (v) { VariantClear(v); // whatever was there before CY *pf = (CY *)CoTaskMemAlloc(sizeof(CY)); - memcpy(pf, &cur, 64); + memcpy(pf, &cur, 8); // was 64. should be sizeof(x) SF 1689061 V_VT(v) = VT_BYREF|VT_CY; V_CYREF(v) = pf; } @@ -739,7 +739,7 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_Variant_getVariantString return NULL; } BSTR bs = V_BSTR(v); - jstring js = env->NewString(bs, SysStringLen(bs)); + jstring js = env->NewString((jchar*)bs, SysStringLen(bs));// SR cast SF 1689061 return js; } return NULL; @@ -762,7 +762,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_Variant_putVariantString // Unicode string (no terminating NULL) provided by GetStringChars const jsize numChars = env->GetStringLength(s); //CComBSTR bs(cStr); - CComBSTR bs( numChars, cStr ); + CComBSTR bs( numChars, (LPCOLESTR)cStr ); // SR cast SF 1689061 V_VT(v) = VT_BSTR; V_BSTR(v) = bs.Copy(); @@ -795,7 +795,7 @@ JNIEXPORT jlong JNICALL Java_com_jacob_com_Variant_getVariantCurrencyRef CY *cy; cy = V_CYREF(v); jlong jl; - memcpy(&jl, cy, 64); + memcpy(&jl, cy, 8); // was 64. should be sizeof(x) SF 1689061 return jl; } return NULL; @@ -1013,4 +1013,4 @@ JNIEXPORT jboolean JNICALL Java_com_jacob_com_Variant_isVariantConsideredNull return JNI_FALSE; } -} +} \ No newline at end of file