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 <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
This commit is contained in:
Santiago Gimeno 2022-10-25 15:23:57 +02:00 committed by GitHub
parent 9f8f311084
commit 67828d58fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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<int64_t>(get_async_id())) + ") [" +
session()->diagnostic_name() + "]";
std::to_string(static_cast<int64_t>(get_async_id())) + ") [" + sname +
"]";
}
// Notify the Http2Stream that a new block of HEADERS is being processed.