@@ -555,6 +555,20 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_cleanup
555555 (void )jenv ;
556556 (void )jcl ;
557557
558+ /* release global logging callback object if registered */
559+ if (g_loggingCbIfaceObj != NULL ) {
560+ (* jenv )-> DeleteGlobalRef (jenv , g_loggingCbIfaceObj );
561+ g_loggingCbIfaceObj = NULL ;
562+ }
563+
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+
558572 return wolfSSL_Cleanup ();
559573}
560574
@@ -583,18 +597,26 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_setLoggingCb
583597
584598 (void )jcl ;
585599
586- if (! jenv || ! callback ) {
600+ if (jenv == NULL ) {
587601 return BAD_FUNC_ARG ;
588602 }
589603
590- /* store Java logging callback Interface object */
591- g_loggingCbIfaceObj = (* jenv )-> NewGlobalRef (jenv , callback );
592- if (!g_loggingCbIfaceObj ) {
593- printf ("error storing global logging callback interface\n" );
594- return SSL_FAILURE ;
604+ /* release existing logging callback object if registered */
605+ if (g_loggingCbIfaceObj != NULL ) {
606+ (* jenv )-> DeleteGlobalRef (jenv , g_loggingCbIfaceObj );
607+ g_loggingCbIfaceObj = NULL ;
595608 }
596609
597- ret = wolfSSL_SetLoggingCb (NativeLoggingCallback );
610+ if (callback != NULL ) {
611+ /* store Java logging callback Interface object */
612+ g_loggingCbIfaceObj = (* jenv )-> NewGlobalRef (jenv , callback );
613+ if (g_loggingCbIfaceObj == NULL ) {
614+ printf ("error storing global logging callback interface\n" );
615+ return SSL_FAILURE ;
616+ }
617+
618+ ret = wolfSSL_SetLoggingCb (NativeLoggingCallback );
619+ }
598620
599621 return ret ;
600622}
@@ -776,6 +798,10 @@ void NativeFIPSErrorCallback(const int ok, const int err,
776798 (* jenv )-> ThrowNew (jenv , excClass ,
777799 "Object reference invalid in NativeFIPSErrorCallback" );
778800 }
801+ #else
802+ (void )ok ;
803+ (void )err ;
804+ (void )hash ;
779805#endif
780806}
781807
@@ -786,21 +812,29 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_setFIPSCb
786812 (void )jcl ;
787813
788814#ifdef HAVE_FIPS
789- if (jenv == NULL || callback == NULL ) {
815+ if (jenv == NULL ) {
790816 return BAD_FUNC_ARG ;
791817 }
792818
793- /* store Java FIPS callback Interface object */
794- g_fipsCbIfaceObj = (* jenv )-> NewGlobalRef (jenv , callback );
795- if (!g_fipsCbIfaceObj ) {
796- printf ("error storing global wolfCrypt FIPS callback interface\n" );
797- return SSL_FAILURE ;
819+ /* release existing FIPS callback object if set */
820+ if (g_fipsCbIfaceObj != NULL ) {
821+ (* jenv )-> DeleteGlobalRef (jenv , g_fipsCbIfaceObj );
822+ g_fipsCbIfaceObj = NULL ;
798823 }
799824
800- /* register NativeFIPSErrorCallback, wraps Java callback */
801- ret = wolfCrypt_SetCb_fips (NativeFIPSErrorCallback );
802- if (ret == 0 ) {
803- ret = SSL_SUCCESS ;
825+ if (callback != NULL ) {
826+ /* store Java FIPS callback Interface object */
827+ g_fipsCbIfaceObj = (* jenv )-> NewGlobalRef (jenv , callback );
828+ if (g_fipsCbIfaceObj == NULL ) {
829+ printf ("error storing global wolfCrypt FIPS callback interface\n" );
830+ return SSL_FAILURE ;
831+ }
832+
833+ /* register NativeFIPSErrorCallback, wraps Java callback */
834+ ret = wolfCrypt_SetCb_fips (NativeFIPSErrorCallback );
835+ if (ret == 0 ) {
836+ ret = SSL_SUCCESS ;
837+ }
804838 }
805839#else
806840 (void )jenv ;
@@ -817,6 +851,8 @@ JNIEXPORT jstring JNICALL Java_com_wolfssl_WolfSSL_getWolfCryptFIPSCoreHash
817851#ifdef HAVE_FIPS
818852 return (* jenv )-> NewStringUTF (jenv , wolfCrypt_GetCoreHash_fips ());
819853#else
854+ (void )jenv ;
855+ (void )jcl ;
820856 return NULL ;
821857#endif
822858}
0 commit comments