From a93b901209e5e8b1ea9638c27a47e6768f91624b Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Fri, 16 Feb 2018 15:01:16 +0100 Subject: [PATCH] src: add nullptr check for session in DEBUG macro Currenlty when configuring --debug-http2 /test/parallel/test-http2-getpackedsettings.js will segment fault: $ out/Debug/node test/parallel/test-http2-getpackedsettings.js Segmentation fault: 11 This is happening because the settings is created with the Environment in PackSettings: Http2Session::Http2Settings settings(env); This will cause the session to be set to nullptr. When the init function is later called the expanded DEBUG_HTTP2SESSION macro will cause the segment fault when the session is dereferenced. I'm not sure about what the proper solution is here as I'm not very familiar with the http2 code yet. Creating this so that others can provide some feedback. --- src/node_http2.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/node_http2.h b/src/node_http2.h index 0e81eaac6ca7fe..217c19c09287af 100644 --- a/src/node_http2.h +++ b/src/node_http2.h @@ -39,16 +39,20 @@ void inline debug_vfprintf(const char* format, ...) { #define DEBUG_HTTP2(...) debug_vfprintf(__VA_ARGS__); #define DEBUG_HTTP2SESSION(session, message) \ do { \ - DEBUG_HTTP2("Http2Session %s (%.0lf) " message "\n", \ - session->TypeName(), \ - session->get_async_id()); \ + if (session != nullptr) { \ + DEBUG_HTTP2("Http2Session %s (%.0lf) " message "\n", \ + session->TypeName(), \ + session->get_async_id()); \ + } \ } while (0) #define DEBUG_HTTP2SESSION2(session, message, ...) \ do { \ - DEBUG_HTTP2("Http2Session %s (%.0lf) " message "\n", \ - session->TypeName(), \ - session->get_async_id(), \ + if (session != nullptr) { \ + DEBUG_HTTP2("Http2Session %s (%.0lf) " message "\n", \ + session->TypeName(), \ + session->get_async_id(), \ __VA_ARGS__); \ + } \ } while (0) #define DEBUG_HTTP2STREAM(stream, message) \ do { \