aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/frontends/android/jni/libandroidbridge/backend/android_private_key.c11
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);