@@ -666,9 +666,11 @@ impl rustls_server_cert_verifier {
666666 Some ( provider) => provider,
667667 None => return rustls_result:: NoDefaultCryptoProvider ,
668668 } ;
669- let verifier: Arc <dyn ServerCertVerifier > =
670- Arc :: new( rustls_platform_verifier:: Verifier :: new( ) . with_provider( provider) ) ;
671- set_boxed_mut_ptr( verifier_out, verifier) ;
669+ let verifier = match rustls_platform_verifier:: Verifier :: new( provider) {
670+ Ok ( v) => v,
671+ Err ( e) => return error:: map_error( e) ,
672+ } ;
673+ set_boxed_mut_ptr( verifier_out, Arc :: new( verifier) ) ;
672674 rustls_result:: Ok
673675 }
674676 }
@@ -680,15 +682,20 @@ impl rustls_server_cert_verifier {
680682 /// The verifier can be used in several `rustls_client_config` instances and must be freed by
681683 /// the application using `rustls_server_cert_verifier_free` when no longer needed.
682684 ///
685+ /// If the initialization of `rustls-platform-verifier` fails, this function returns
686+ /// `NULL`.
687+ ///
683688 /// [`rustls-platform-verifier`]: https://github.com/rustls/rustls-platform-verifier
684689 #[ no_mangle]
685690 pub extern "C" fn rustls_platform_server_cert_verifier_with_provider (
686691 provider : * const rustls_crypto_provider ,
687692 ) -> * mut rustls_server_cert_verifier {
688693 ffi_panic_boundary ! {
689694 let provider = try_clone_arc!( provider) ;
690- let verifier: Arc <dyn ServerCertVerifier > =
691- Arc :: new( rustls_platform_verifier:: Verifier :: new( ) . with_provider( provider) ) ;
695+ let verifier: Arc <dyn ServerCertVerifier > = match rustls_platform_verifier:: Verifier :: new( provider) {
696+ Ok ( v) => Arc :: new( v) ,
697+ Err ( _) => return core:: ptr:: null_mut( ) ,
698+ } ;
692699 to_boxed_mut_ptr( verifier)
693700 }
694701 }
0 commit comments