@@ -561,6 +561,14 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_cleanup
561561 g_loggingCbIfaceObj = NULL ;
562562 }
563563
564+ #ifdef HAVE_FIPS
565+ /* release existing FIPS callback object if set */
566+ if (g_fipsCbIfaceObj != NULL ) {
567+ (* jenv )-> DeleteGlobalRef (jenv , g_fipsCbIfaceObj );
568+ g_fipsCbIfaceObj = NULL ;
569+ }
570+ #endif
571+
564572 return wolfSSL_Cleanup ();
565573}
566574
@@ -800,21 +808,29 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_setFIPSCb
800808 (void )jcl ;
801809
802810#ifdef HAVE_FIPS
803- if (jenv == NULL || callback == NULL ) {
811+ if (jenv == NULL ) {
804812 return BAD_FUNC_ARG ;
805813 }
806814
807- /* store Java FIPS callback Interface object */
808- g_fipsCbIfaceObj = (* jenv )-> NewGlobalRef (jenv , callback );
809- if (!g_fipsCbIfaceObj ) {
810- printf ("error storing global wolfCrypt FIPS callback interface\n" );
811- return SSL_FAILURE ;
815+ /* release existing FIPS callback object if set */
816+ if (g_fipsCbIfaceObj != NULL ) {
817+ (* jenv )-> DeleteGlobalRef (jenv , g_fipsCbIfaceObj );
818+ g_fipsCbIfaceObj = NULL ;
812819 }
813820
814- /* register NativeFIPSErrorCallback, wraps Java callback */
815- ret = wolfCrypt_SetCb_fips (NativeFIPSErrorCallback );
816- if (ret == 0 ) {
817- ret = SSL_SUCCESS ;
821+ if (callback != NULL ) {
822+ /* store Java FIPS callback Interface object */
823+ g_fipsCbIfaceObj = (* jenv )-> NewGlobalRef (jenv , callback );
824+ if (g_fipsCbIfaceObj == NULL ) {
825+ printf ("error storing global wolfCrypt FIPS callback interface\n" );
826+ return SSL_FAILURE ;
827+ }
828+
829+ /* register NativeFIPSErrorCallback, wraps Java callback */
830+ ret = wolfCrypt_SetCb_fips (NativeFIPSErrorCallback );
831+ if (ret == 0 ) {
832+ ret = SSL_SUCCESS ;
833+ }
818834 }
819835#else
820836 (void )jenv ;
0 commit comments