summaryrefslogtreecommitdiffstats
path: root/jni
diff options
context:
space:
mode:
authorBhakthavatsala Raghavendra <braghave@codeaurora.org>2014-10-23 10:42:56 -0700
committerLinux Build Service Account <lnxbuild@localhost>2014-11-04 08:26:31 -0700
commitc91559f3b8e2084ed6eda8d44da88cb4fdc594e5 (patch)
tree39a8b71c667970ec5395bf13f44396a0834c2063 /jni
parentc32dc4e5eeac0f751e17164f9b2fbb9652eae49d (diff)
downloadandroid_packages_apps_Bluetooth-c91559f3b8e2084ed6eda8d44da88cb4fdc594e5.tar.gz
android_packages_apps_Bluetooth-c91559f3b8e2084ed6eda8d44da88cb4fdc594e5.tar.bz2
android_packages_apps_Bluetooth-c91559f3b8e2084ed6eda8d44da88cb4fdc594e5.zip
Bluetooth: Add NULL validation for Callback Objects
NULL validation added for Callback objects for the newly introduced JNI functions Change-Id: Ia43d7de9dbd6588210e15142675f3463221a3de8 CRs-fixed: 744743
Diffstat (limited to 'jni')
-rw-r--r--jni/com_android_bluetooth_btservice_AdapterService.cpp36
1 files changed, 27 insertions, 9 deletions
diff --git a/jni/com_android_bluetooth_btservice_AdapterService.cpp b/jni/com_android_bluetooth_btservice_AdapterService.cpp
index 2522792b3..b75ad1b7f 100644
--- a/jni/com_android_bluetooth_btservice_AdapterService.cpp
+++ b/jni/com_android_bluetooth_btservice_AdapterService.cpp
@@ -56,7 +56,7 @@ static const btsock_interface_t *sBluetoothSocketInterface = NULL;
static const btmce_interface_t *sBluetoothMceInterface = NULL;
static JNIEnv *callbackEnv = NULL;
-static jobject sJniAdapterServiceObj;
+static jobject sJniAdapterServiceObj = NULL;
static jobject sJniCallbacksObj = NULL;
static jfieldID sJniCallbacksField;
@@ -475,9 +475,13 @@ static void energy_info_recv_callback(bt_activity_energy_info *p_energy_info)
return;
}
- callbackEnv->CallVoidMethod(sJniAdapterServiceObj, method_energyInfo, p_energy_info->status,
- p_energy_info->ctrl_state, p_energy_info->tx_time, p_energy_info->rx_time,
- p_energy_info->idle_time, p_energy_info->energy_used);
+ if (sJniAdapterServiceObj) {
+ callbackEnv->CallVoidMethod(sJniAdapterServiceObj, method_energyInfo, p_energy_info->status,
+ p_energy_info->ctrl_state, p_energy_info->tx_time, p_energy_info->rx_time,
+ p_energy_info->idle_time, p_energy_info->energy_used);
+ } else {
+ ALOGE("JNI ERROR : JNI reference already cleaned : energy_info_recv_callback", __FUNCTION__);
+ }
checkAndClearExceptionFromCallback(callbackEnv, __FUNCTION__);
}
@@ -520,6 +524,7 @@ static bool set_wake_alarm_callout(uint64_t delay_millis, bool should_wake, alar
JNIEnv *env;
JavaVM *vm = AndroidRuntime::getJavaVM();
jint status = vm->GetEnv((void **)&env, JNI_VERSION_1_6);
+ jboolean ret = JNI_FALSE;
if (status != JNI_OK && status != JNI_EDETACHED) {
ALOGE("%s unable to get environment for JNI call", __func__);
@@ -535,7 +540,12 @@ static bool set_wake_alarm_callout(uint64_t delay_millis, bool should_wake, alar
sAlarmCallbackData = data;
jboolean jshould_wake = should_wake ? JNI_TRUE : JNI_FALSE;
- jboolean ret = env->CallBooleanMethod(sJniAdapterServiceObj, method_setWakeAlarm, (jlong)delay_millis, jshould_wake);
+ if (sJniAdapterServiceObj) {
+ ret = env->CallBooleanMethod(sJniAdapterServiceObj, method_setWakeAlarm, (jlong)delay_millis, jshould_wake);
+ } else {
+ ALOGE("JNI ERROR : JNI reference already cleaned : set_wake_alarm_callout", __FUNCTION__);
+ }
+
if (!ret) {
sAlarmCallback = NULL;
sAlarmCallbackData = NULL;
@@ -566,8 +576,12 @@ static int acquire_wake_lock_callout(const char *lock_name) {
jboolean ret = JNI_FALSE;
jstring lock_name_jni = env->NewStringUTF(lock_name);
if (lock_name_jni) {
- ret = env->CallBooleanMethod(sJniAdapterServiceObj, method_acquireWakeLock, lock_name_jni);
- env->DeleteLocalRef(lock_name_jni);
+ if (sJniAdapterServiceObj) {
+ ret = env->CallBooleanMethod(sJniAdapterServiceObj, method_acquireWakeLock, lock_name_jni);
+ env->DeleteLocalRef(lock_name_jni);
+ } else {
+ ALOGE("JNI ERROR : JNI reference already cleaned : acquire_wake_lock_callout", __FUNCTION__);
+ }
} else {
ALOGE("%s unable to allocate string: %s", __func__, lock_name);
}
@@ -597,8 +611,12 @@ static int release_wake_lock_callout(const char *lock_name) {
jboolean ret = JNI_FALSE;
jstring lock_name_jni = env->NewStringUTF(lock_name);
if (lock_name_jni) {
- ret = env->CallBooleanMethod(sJniAdapterServiceObj, method_releaseWakeLock, lock_name_jni);
- env->DeleteLocalRef(lock_name_jni);
+ if (sJniAdapterServiceObj) {
+ ret = env->CallBooleanMethod(sJniAdapterServiceObj, method_releaseWakeLock, lock_name_jni);
+ env->DeleteLocalRef(lock_name_jni);
+ } else {
+ ALOGE("JNI ERROR : JNI reference already cleaned : release_wake_lock_callout", __FUNCTION__);
+ }
} else {
ALOGE("%s unable to allocate string: %s", __func__, lock_name);
}