From e567cfc44212aa946c5c1740911aefe5aad882e1 Mon Sep 17 00:00:00 2001 From: Sergiu Deitsch Date: Fri, 6 Oct 2023 00:34:38 +0200 Subject: [PATCH] fix: address sanitizer failures (#956) --- src/googletest.h | 11 ++++++++++- src/logging.cc | 4 +++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/googletest.h b/src/googletest.h index ff910a844..9e2e9e573 100644 --- a/src/googletest.h +++ b/src/googletest.h @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -637,13 +638,21 @@ void (*g_new_hook)() = nullptr; _END_GOOGLE_NAMESPACE_ -void* operator new(size_t size) GOOGLE_GLOG_THROW_BAD_ALLOC { +void* operator new(size_t size, const std::nothrow_t&) noexcept { if (GOOGLE_NAMESPACE::g_new_hook) { GOOGLE_NAMESPACE::g_new_hook(); } return malloc(size); } +void* operator new(size_t size) GOOGLE_GLOG_THROW_BAD_ALLOC { + void* p = ::operator new(size, std::nothrow); + if (p == nullptr) { + throw std::bad_alloc{}; + } + return p; +} + void* operator new[](size_t size) GOOGLE_GLOG_THROW_BAD_ALLOC { return ::operator new(size); } diff --git a/src/logging.cc b/src/logging.cc index 9dd7dcd3b..fa8868561 100644 --- a/src/logging.cc +++ b/src/logging.cc @@ -2268,7 +2268,9 @@ static bool SendEmailInternal(const char*dest, const char *subject, } sanitized_dests << s; } - dest = sanitized_dests.str().c_str(); + // Avoid dangling reference + const std::string& tmp = sanitized_dests.str(); + dest = tmp.c_str(); if ( use_logging ) { VLOG(1) << "Trying to send TITLE:" << subject