add call to DeleteGlobalRef for native WOLFSSL CRL callback, only currently applies to JNI not JSSE-only

pull/69/head
Chris Conlon 2021-09-30 15:07:51 -06:00
parent 7597b5e35a
commit 8c01c9c93f
1 changed files with 25 additions and 8 deletions

View File

@ -957,6 +957,14 @@ JNIEXPORT void JNICALL Java_com_wolfssl_WolfSSLSession_freeSSL
return; return;
} }
#ifdef HAVE_CRL
/* release global CRL callback ref if registered */
if (g_crlCbIfaceObj != NULL) {
(*jenv)->DeleteGlobalRef(jenv, g_crlCbIfaceObj);
g_crlCbIfaceObj = NULL;
}
#endif
/* native cleanup */ /* native cleanup */
wolfSSL_free((WOLFSSL*)(uintptr_t)ssl); wolfSSL_free((WOLFSSL*)(uintptr_t)ssl);
ssl = 0; ssl = 0;
@ -2037,7 +2045,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLSession_setCRLCb
(void)jcl; (void)jcl;
if (!jenv || !cb) { if (jenv == NULL) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
} }
@ -2049,21 +2057,30 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLSession_setCRLCb
return SSL_FAILURE; return SSL_FAILURE;
} }
if (!ssl) { if (ssl == 0) {
(*jenv)->ThrowNew(jenv, excClass, (*jenv)->ThrowNew(jenv, excClass,
"Input WolfSSLSession object was null in " "Input WolfSSLSession object was null in "
"setCRLCb"); "setCRLCb");
return SSL_FAILURE; return SSL_FAILURE;
} }
/* store Java CRL callback Interface object */ /* release global CRL callback ref if already registered */
g_crlCbIfaceObj = (*jenv)->NewGlobalRef(jenv, cb); if (g_crlCbIfaceObj != NULL) {
if (!g_crlCbIfaceObj) { (*jenv)->DeleteGlobalRef(jenv, g_crlCbIfaceObj);
(*jenv)->ThrowNew(jenv, excClass, g_crlCbIfaceObj = NULL;
"Error storing global missingCRLCallback interface");
} }
ret = wolfSSL_SetCRL_Cb((WOLFSSL*)(uintptr_t)ssl, NativeMissingCRLCallback); if (cb != NULL) {
/* store Java CRL callback Interface object */
g_crlCbIfaceObj = (*jenv)->NewGlobalRef(jenv, cb);
if (g_crlCbIfaceObj == NULL) {
(*jenv)->ThrowNew(jenv, excClass,
"Error storing global missingCRLCallback interface");
}
ret = wolfSSL_SetCRL_Cb((WOLFSSL*)(uintptr_t)ssl,
NativeMissingCRLCallback);
}
return ret; return ret;
#else #else