From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id 7A2F9385841C; Fri, 2 Dec 2022 00:18:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7A2F9385841C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1669940301; bh=HJqpPyd0wL8oUUwvfDf29SMg2uhxHFd3ViEOv0st3uQ=; h=From:To:Subject:Date:From; b=jJ2gnobdwmJkvfmEg83srfGgSt1dIsPVo00RnLzGeIwlqOQMam2Nr7wXE7lJWA4/3 zKC4Ivj7z3sYw1ZxhZ48Y5610L7Xn3ccLyYvsV7A10kdOafb1mK462toCrlGGozpkh dD1w1maXHh/v+xB1+tuFfCeXOeKbM2qbYJkPlZ18= MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wakely To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r13-4452] libstdc++: Add error handler for X-Act-Checkin: gcc X-Git-Author: =?utf-8?q?Bj=C3=B6rn_Sch=C3=A4pers?= X-Git-Refname: refs/heads/master X-Git-Oldrev: de144fdab17dbbb64ccb540056ab78b4ffb3fbbc X-Git-Newrev: 40adb39566c6e06809fc63ccade8d25bdfc8dd24 Message-Id: <20221202001821.7A2F9385841C@sourceware.org> Date: Fri, 2 Dec 2022 00:18:21 +0000 (GMT) List-Id: https://gcc.gnu.org/g:40adb39566c6e06809fc63ccade8d25bdfc8dd24 commit r13-4452-g40adb39566c6e06809fc63ccade8d25bdfc8dd24 Author: Björn Schäpers Date: Wed Nov 30 12:04:16 2022 +0000 libstdc++: Add error handler for Not providing an error handler results in a null pointer dereference when an error occurs. Co-authored-by: Jonathan Wakely libstdc++-v3/ChangeLog: * include/std/stacktrace (stacktrace_entry::_S_err_handler): New static function. (stacktrace_entry, basic_stacktrace): Pass &_S_err_handler to all calls to libbacktrace. Diff: --- libstdc++-v3/include/std/stacktrace | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace index e7cbbee5638..ec3335e89d8 100644 --- a/libstdc++-v3/include/std/stacktrace +++ b/libstdc++-v3/include/std/stacktrace @@ -155,11 +155,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template friend class basic_stacktrace; + static void _S_err_handler(void*, const char*, int) { } + static __glibcxx_backtrace_state* _S_init() { static __glibcxx_backtrace_state* __state - = __glibcxx_backtrace_create_state(nullptr, 1, nullptr, nullptr); + = __glibcxx_backtrace_create_state(nullptr, 1, _S_err_handler, nullptr); return __state; } @@ -192,7 +194,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __function != nullptr; }; const auto __state = _S_init(); - if (::__glibcxx_backtrace_pcinfo(__state, _M_pc, +__cb, nullptr, &__data)) + if (::__glibcxx_backtrace_pcinfo(__state, _M_pc, +__cb, _S_err_handler, + &__data)) return true; if (__desc && __desc->empty()) { @@ -201,8 +204,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (__symname) *static_cast<_Data*>(__data)->_M_desc = _S_demangle(__symname); }; - if (::__glibcxx_backtrace_syminfo(__state, _M_pc, +__cb2, nullptr, - &__data)) + if (::__glibcxx_backtrace_syminfo(__state, _M_pc, +__cb2, + _S_err_handler, &__data)) return true; } return false; @@ -252,7 +255,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (auto __cb = __ret._M_prepare()) [[likely]] { auto __state = stacktrace_entry::_S_init(); - if (__glibcxx_backtrace_simple(__state, 1, __cb, nullptr, + if (__glibcxx_backtrace_simple(__state, 1, __cb, + stacktrace_entry::_S_err_handler, std::__addressof(__ret))) __ret._M_clear(); } @@ -270,7 +274,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (auto __cb = __ret._M_prepare()) [[likely]] { auto __state = stacktrace_entry::_S_init(); - if (__glibcxx_backtrace_simple(__state, __skip + 1, __cb, nullptr, + if (__glibcxx_backtrace_simple(__state, __skip + 1, __cb, + stacktrace_entry::_S_err_handler, std::__addressof(__ret))) __ret._M_clear(); } @@ -294,7 +299,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { auto __state = stacktrace_entry::_S_init(); int __err = __glibcxx_backtrace_simple(__state, __skip + 1, __cb, - nullptr, + stacktrace_entry::_S_err_handler, std::__addressof(__ret)); if (__err < 0) __ret._M_clear();