From ab6ab9c271ac7c77e03c81f21428739ba4e7f2f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= Date: Tue, 21 Jan 2020 09:52:29 -0400 Subject: [PATCH] tls: simplify errors using ThrowCryptoError PR-URL: https://github.com/nodejs/node/pull/31436 Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: David Carlier Reviewed-By: Ben Noordhuis Reviewed-By: Rich Trott --- src/node_crypto.cc | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/src/node_crypto.cc b/src/node_crypto.cc index f03c1e31b994f8..df823c48c188c9 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -733,19 +733,14 @@ void SecureContext::SetKey(const FunctionCallbackInfo& args) { if (!key) { unsigned long err = ERR_get_error(); // NOLINT(runtime/int) - if (!err) { - return env->ThrowError("PEM_read_bio_PrivateKey"); - } - return ThrowCryptoError(env, err); + return ThrowCryptoError(env, err, "PEM_read_bio_PrivateKey"); } int rv = SSL_CTX_use_PrivateKey(sc->ctx_.get(), key.get()); if (!rv) { unsigned long err = ERR_get_error(); // NOLINT(runtime/int) - if (!err) - return env->ThrowError("SSL_CTX_use_PrivateKey"); - return ThrowCryptoError(env, err); + return ThrowCryptoError(env, err, "SSL_CTX_use_PrivateKey"); } } @@ -971,10 +966,7 @@ void SecureContext::SetCert(const FunctionCallbackInfo& args) { if (!rv) { unsigned long err = ERR_get_error(); // NOLINT(runtime/int) - if (!err) { - return env->ThrowError("SSL_CTX_use_certificate_chain"); - } - return ThrowCryptoError(env, err); + return ThrowCryptoError(env, err, "SSL_CTX_use_certificate_chain"); } } @@ -1183,11 +1175,7 @@ void SecureContext::SetCipherSuites(const FunctionCallbackInfo& args) { const node::Utf8Value ciphers(args.GetIsolate(), args[0]); if (!SSL_CTX_set_ciphersuites(sc->ctx_.get(), *ciphers)) { unsigned long err = ERR_get_error(); // NOLINT(runtime/int) - if (!err) { - // This would be an OpenSSL bug if it happened. - return env->ThrowError("Failed to set ciphers"); - } - return ThrowCryptoError(env, err); + return ThrowCryptoError(env, err, "Failed to set ciphers"); } #endif } @@ -1205,10 +1193,6 @@ void SecureContext::SetCiphers(const FunctionCallbackInfo& args) { const node::Utf8Value ciphers(args.GetIsolate(), args[0]); if (!SSL_CTX_set_cipher_list(sc->ctx_.get(), *ciphers)) { unsigned long err = ERR_get_error(); // NOLINT(runtime/int) - if (!err) { - // This would be an OpenSSL bug if it happened. - return env->ThrowError("Failed to set ciphers"); - } if (strlen(*ciphers) == 0 && ERR_GET_REASON(err) == SSL_R_NO_CIPHER_MATCH) { // TLS1.2 ciphers were deliberately cleared, so don't consider @@ -1217,7 +1201,7 @@ void SecureContext::SetCiphers(const FunctionCallbackInfo& args) { // that's actually an error. return; } - return ThrowCryptoError(env, err); + return ThrowCryptoError(env, err, "Failed to set ciphers"); } } @@ -3027,9 +3011,7 @@ void SSLWrap::CertCbDone(const FunctionCallbackInfo& args) { // Not clear why sometimes we throw error, and sometimes we call // onerror(). Both cause .destroy(), but onerror does a bit more. unsigned long err = ERR_get_error(); // NOLINT(runtime/int) - if (!err) - return env->ThrowError("CertCbDone"); - return ThrowCryptoError(env, err); + return ThrowCryptoError(env, err, "CertCbDone"); } } else { // Failure: incorrect SNI context object