diff --git a/src/crypto/crypto_x509.cc b/src/crypto/crypto_x509.cc index a8c4255d52d..e10694e6dd0 100644 --- a/src/crypto/crypto_x509.cc +++ b/src/crypto/crypto_x509.cc @@ -468,6 +468,8 @@ void X509Certificate::Verify(const FunctionCallbackInfo& args) { ASSIGN_OR_RETURN_UNWRAP(&key, args[0]); CHECK_EQ(key->Data()->GetKeyType(), kKeyTypePublic); + ClearErrorOnReturn clear_error_on_return; + args.GetReturnValue().Set( X509_verify( cert->get(), diff --git a/test/parallel/test-crypto-x509.js b/test/parallel/test-crypto-x509.js index d1782359277..b99fc47d4dd 100644 --- a/test/parallel/test-crypto-x509.js +++ b/test/parallel/test-crypto-x509.js @@ -187,6 +187,11 @@ const der = Buffer.from( code: 'ERR_INVALID_ARG_VALUE' }); + // Confirm failure of X509Certificate:verify() doesn't affect other functions that use OpenSSL. + assert(!x509.verify(x509.publicKey)); + // This call should not throw. + createPrivateKey(key); + // X509Certificate can be cloned via MessageChannel/MessagePort const mc = new MessageChannel(); mc.port1.onmessage = common.mustCall(({ data }) => {