From a534175aa51edca34af5966fe31ccfcf8aafda3f Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Tue, 25 Oct 2022 15:23:57 +0200 Subject: [PATCH] http2: fix crash on Http2Stream::diagnostic_name() It can happen that the Http2Stream::session_ has already been deleted when the Http2Stream destructor is called, causing `diagnostic_name()` to crash. Observed when running some http2 tests on Windows with the debug logs activated. PR-URL: https://github.com/nodejs/node/pull/45123 Reviewed-By: Matteo Collina Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen Reviewed-By: Rafael Gonzaga --- src/node_http2.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/node_http2.cc b/src/node_http2.cc index cb44e3aec2e8e2..f61c650de53a3e 100644 --- a/src/node_http2.cc +++ b/src/node_http2.cc @@ -2060,9 +2060,12 @@ void Http2Stream::MemoryInfo(MemoryTracker* tracker) const { } std::string Http2Stream::diagnostic_name() const { + const Http2Session* sess = session(); + const std::string sname = + sess ? sess->diagnostic_name() : "session already destroyed"; return "HttpStream " + std::to_string(id()) + " (" + - std::to_string(static_cast(get_async_id())) + ") [" + - session()->diagnostic_name() + "]"; + std::to_string(static_cast(get_async_id())) + ") [" + sname + + "]"; } // Notify the Http2Stream that a new block of HEADERS is being processed.