From 81dc2419f459e949b52c0d626c43342dcc71d1ec Mon Sep 17 00:00:00 2001 From: cjihrig Date: Sat, 13 Oct 2018 00:59:35 -0400 Subject: [PATCH] tls: prevent multiple connection errors onConnectEnd(), which is called by TLSSocket, has a guard to prevent being called multiple times, but it does not prevent the OpenSSL error handler from being called, leading to multiple error events. This commit adds that piece of missing logic. PR-URL: https://github.com/nodejs/node/pull/23636 Fixes: https://github.com/nodejs/node/issues/23631 Reviewed-By: Anna Henningsen Reviewed-By: Wyatt Preul Reviewed-By: James M Snell --- lib/_tls_wrap.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index d6f1480040bd3b..9049a830f805e4 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -250,9 +250,11 @@ function onocspresponse(resp) { function onerror(err) { const owner = this[owner_symbol]; - if (owner._writableState.errorEmitted) + if (owner._hadError) return; + owner._hadError = true; + // Destroy socket if error happened before handshake's finish if (!owner._secureEstablished) { // When handshake fails control is not yet released, @@ -267,8 +269,6 @@ function onerror(err) { // Throw error owner._emitTLSError(err); } - - owner._writableState.errorEmitted = true; } function initRead(tls, wrapped) {