From f5985c734cf1072defc63a3b34cc37a299b7e391 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sun, 25 Feb 2018 21:56:08 +0100 Subject: [PATCH] tls,http2: handle writes after SSL destroy more gracefully MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This might otherwise result in a hard crash when trying to write to a socket after a sudden disconnect. Note that the test here uses an aborted `h2load` run to create the failing requests; That’s far from ideal, but it provides a reasonably reliably reproduction at this point. Backport-PR-URL: https://github.com/nodejs/node/pull/22924 PR-URL: https://github.com/nodejs/node/pull/18987 Fixes: https://github.com/nodejs/node/issues/18973 Reviewed-By: James M Snell Reviewed-By: Matteo Collina --- src/tls_wrap.cc | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/tls_wrap.cc b/src/tls_wrap.cc index c3e6e699c9c22c..4c01f618a357ed 100644 --- a/src/tls_wrap.cc +++ b/src/tls_wrap.cc @@ -601,7 +601,12 @@ int TLSWrap::DoWrite(WriteWrap* w, size_t count, uv_stream_t* send_handle) { CHECK_EQ(send_handle, nullptr); - CHECK_NE(ssl_, nullptr); + + if (ssl_ == nullptr) { + ClearError(); + error_ = "Write after DestroySSL"; + return UV_EPROTO; + } bool empty = true; @@ -642,12 +647,6 @@ int TLSWrap::DoWrite(WriteWrap* w, return 0; } - if (ssl_ == nullptr) { - ClearError(); - error_ = "Write after DestroySSL"; - return UV_EPROTO; - } - crypto::MarkPopErrorOnReturn mark_pop_error_on_return; int written = 0;