From 5933397932cb944672309e3f9d0cc4af55eca4c3 Mon Sep 17 00:00:00 2001 From: "jihwan.seo" Date: Wed, 31 Aug 2016 13:11:48 +0900 Subject: [PATCH] fixed potential issue for Android JNI Change-Id: I798b87fde00886061f53536c8c464e1cf7861e0d Signed-off-by: jihwan.seo Reviewed-on: https://gerrit.iotivity.org/gerrit/11171 Tested-by: jenkins-iotivity Reviewed-by: Jon A. Cruz --- android/android_api/base/jni/JniOcPlatform.cpp | 8 +-- .../android_api/base/jni/JniOcPresenceHandle.cpp | 4 +- android/android_api/base/jni/JniOcStack.cpp | 84 +++++++++++----------- 3 files changed, 49 insertions(+), 47 deletions(-) diff --git a/android/android_api/base/jni/JniOcPlatform.cpp b/android/android_api/base/jni/JniOcPlatform.cpp index 4a5c846..f5200ae 100644 --- a/android/android_api/base/jni/JniOcPlatform.cpp +++ b/android/android_api/base/jni/JniOcPlatform.cpp @@ -581,7 +581,7 @@ void RemoveOnPublishResourceListener(JNIEnv* env, jobject jListener) { if (!env) { - ThrowOcException(JNI_EXCEPTION, "env is null"); + LOGE("env is null"); return; } @@ -664,7 +664,7 @@ void RemoveOnDeleteResourceListener(JNIEnv* env, jobject jListener) { if (!env) { - ThrowOcException(JNI_EXCEPTION, "env is null"); + LOGE("env is null"); return; } @@ -2712,7 +2712,7 @@ JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_publishResourceToRD1( #ifdef RD_CLIENT if (!env) { - ThrowOcException(OC_STACK_INVALID_PARAM, "env is null"); + LOGE("env is null"); return; } std::string host; @@ -2862,7 +2862,7 @@ JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_deleteResourceFromRD1( #ifdef RD_CLIENT if (!env) { - ThrowOcException(OC_STACK_INVALID_PARAM, "env is null"); + LOGE("env is null"); return; } std::string host; diff --git a/android/android_api/base/jni/JniOcPresenceHandle.cpp b/android/android_api/base/jni/JniOcPresenceHandle.cpp index 22e2896..9d74e23 100644 --- a/android/android_api/base/jni/JniOcPresenceHandle.cpp +++ b/android/android_api/base/jni/JniOcPresenceHandle.cpp @@ -23,12 +23,12 @@ #include "OCPlatform.h" JniOcPresenceHandle::JniOcPresenceHandle(JniOnPresenceListener* jniListener, OCPresenceHandle presenceHandle) - : m_jniListener(jniListener), m_presenceHandle(presenceHandle) + : m_jniListener(jniListener), m_presenceHandle(presenceHandle), m_jniObserveListener(nullptr) { } JniOcPresenceHandle::JniOcPresenceHandle(JniOnObserveListener* jniListener, OCPresenceHandle presenceHandle) - : m_jniObserveListener(jniListener), m_presenceHandle(presenceHandle) + : m_jniObserveListener(jniListener), m_presenceHandle(presenceHandle), m_jniListener(nullptr) { } diff --git a/android/android_api/base/jni/JniOcStack.cpp b/android/android_api/base/jni/JniOcStack.cpp index c33e2d5..06de766 100644 --- a/android/android_api/base/jni/JniOcStack.cpp +++ b/android/android_api/base/jni/JniOcStack.cpp @@ -601,47 +601,49 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) return; } - - env->DeleteGlobalRef(g_cls_Integer); - env->DeleteGlobalRef(g_cls_int1DArray); - env->DeleteGlobalRef(g_cls_int2DArray); - env->DeleteGlobalRef(g_cls_Double); - env->DeleteGlobalRef(g_cls_double1DArray); - env->DeleteGlobalRef(g_cls_double2DArray); - env->DeleteGlobalRef(g_cls_Boolean); - env->DeleteGlobalRef(g_cls_boolean1DArray); - env->DeleteGlobalRef(g_cls_boolean2DArray); - env->DeleteGlobalRef(g_cls_String); - env->DeleteGlobalRef(g_cls_String1DArray); - env->DeleteGlobalRef(g_cls_String2DArray); - env->DeleteGlobalRef(g_cls_LinkedList); - env->DeleteGlobalRef(g_cls_Map); - env->DeleteGlobalRef(g_cls_MapEntry); - env->DeleteGlobalRef(g_cls_Set); - env->DeleteGlobalRef(g_cls_Iterator); - env->DeleteGlobalRef(g_cls_HashMap); - env->DeleteGlobalRef(g_cls_OcResource); - env->DeleteGlobalRef(g_cls_OcException); - env->DeleteGlobalRef(g_cls_OcRepresentation); - env->DeleteGlobalRef(g_cls_OcRepresentation1DArray); - env->DeleteGlobalRef(g_cls_OcRepresentation2DArray); - env->DeleteGlobalRef(g_cls_OcResourceRequest); - env->DeleteGlobalRef(g_cls_OcResourceResponse); - env->DeleteGlobalRef(g_cls_OcResourceHandle); - env->DeleteGlobalRef(g_cls_OcPresenceHandle); - env->DeleteGlobalRef(g_cls_OcRequestHandle); - env->DeleteGlobalRef(g_cls_OcPresenceStatus); - env->DeleteGlobalRef(g_cls_OcHeaderOption); - env->DeleteGlobalRef(g_cls_ObservationInfo); - env->DeleteGlobalRef(g_cls_OcResourceIdentifier); - env->DeleteGlobalRef(g_cls_OcSecureResource); - env->DeleteGlobalRef(g_cls_OcProvisionResult); - env->DeleteGlobalRef(g_cls_OcDirectPairDevice); + if (env) + { + env->DeleteGlobalRef(g_cls_Integer); + env->DeleteGlobalRef(g_cls_int1DArray); + env->DeleteGlobalRef(g_cls_int2DArray); + env->DeleteGlobalRef(g_cls_Double); + env->DeleteGlobalRef(g_cls_double1DArray); + env->DeleteGlobalRef(g_cls_double2DArray); + env->DeleteGlobalRef(g_cls_Boolean); + env->DeleteGlobalRef(g_cls_boolean1DArray); + env->DeleteGlobalRef(g_cls_boolean2DArray); + env->DeleteGlobalRef(g_cls_String); + env->DeleteGlobalRef(g_cls_String1DArray); + env->DeleteGlobalRef(g_cls_String2DArray); + env->DeleteGlobalRef(g_cls_LinkedList); + env->DeleteGlobalRef(g_cls_Map); + env->DeleteGlobalRef(g_cls_MapEntry); + env->DeleteGlobalRef(g_cls_Set); + env->DeleteGlobalRef(g_cls_Iterator); + env->DeleteGlobalRef(g_cls_HashMap); + env->DeleteGlobalRef(g_cls_OcResource); + env->DeleteGlobalRef(g_cls_OcException); + env->DeleteGlobalRef(g_cls_OcRepresentation); + env->DeleteGlobalRef(g_cls_OcRepresentation1DArray); + env->DeleteGlobalRef(g_cls_OcRepresentation2DArray); + env->DeleteGlobalRef(g_cls_OcResourceRequest); + env->DeleteGlobalRef(g_cls_OcResourceResponse); + env->DeleteGlobalRef(g_cls_OcResourceHandle); + env->DeleteGlobalRef(g_cls_OcPresenceHandle); + env->DeleteGlobalRef(g_cls_OcRequestHandle); + env->DeleteGlobalRef(g_cls_OcPresenceStatus); + env->DeleteGlobalRef(g_cls_OcHeaderOption); + env->DeleteGlobalRef(g_cls_ObservationInfo); + env->DeleteGlobalRef(g_cls_OcResourceIdentifier); + env->DeleteGlobalRef(g_cls_OcSecureResource); + env->DeleteGlobalRef(g_cls_OcProvisionResult); + env->DeleteGlobalRef(g_cls_OcDirectPairDevice); #ifdef WITH_CLOUD - env->DeleteGlobalRef(g_cls_OcAccountManager); + env->DeleteGlobalRef(g_cls_OcAccountManager); #endif - env->DeleteGlobalRef(g_cls_OcOicSecAcl); - env->DeleteGlobalRef(g_cls_OcOicSecAcl_ace); - env->DeleteGlobalRef(g_cls_OcOicSecAcl_resr); - env->DeleteGlobalRef(g_cls_OcOicSecAcl_validity); + env->DeleteGlobalRef(g_cls_OcOicSecAcl); + env->DeleteGlobalRef(g_cls_OcOicSecAcl_ace); + env->DeleteGlobalRef(g_cls_OcOicSecAcl_resr); + env->DeleteGlobalRef(g_cls_OcOicSecAcl_validity); + } } -- 2.7.4