diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/frontends/android/jni/libandroidbridge/backend/android_private_key.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/frontends/android/jni/libandroidbridge/backend/android_private_key.c b/src/frontends/android/jni/libandroidbridge/backend/android_private_key.c index e8a78b5da..3ed3d75a9 100644 --- a/src/frontends/android/jni/libandroidbridge/backend/android_private_key.c +++ b/src/frontends/android/jni/libandroidbridge/backend/android_private_key.c @@ -232,7 +232,16 @@ METHOD(private_key_t, destroy, void, JNIEnv *env; androidjni_attach_thread(&env); - (*env)->DeleteGlobalRef(env, this->key); + if (android_sdk_version >= ANDROID_JELLY_BEAN) + { /* there is a bug in JB that causes a SIGSEGV if the key object is + * garbage collected so we intentionally leak the reference to it */ + DBG1(DBG_LIB, "intentionally leaking private key reference due to " + "a bug in the framework"); + } + else + { + (*env)->DeleteGlobalRef(env, this->key); + } (*env)->DeleteGlobalRef(env, this->signature_class); androidjni_detach_thread(); this->pubkey->destroy(this->pubkey); |