From cc2b3fce4027f21610df84401476a7ef2a951b21 Mon Sep 17 00:00:00 2001 From: Jeremy <51220084+jeremy-rifkin@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:07:58 -0500 Subject: [PATCH] Add another try/catch to prevent any potential TCO --- src/cpptrace.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/cpptrace.cpp b/src/cpptrace.cpp index b454f17..ddfcc76 100644 --- a/src/cpptrace.cpp +++ b/src/cpptrace.cpp @@ -441,12 +441,18 @@ namespace cpptrace { extern const int stderr_fileno = detail::fileno(stderr); CPPTRACE_FORCE_NO_INLINE void print_terminate_trace() { - generate_trace(1).print( - std::cerr, - isatty(stderr_fileno), - true, - "Stack trace to reach terminate handler (most recent call first):" - ); + try { // try/catch can never be hit but it's needed to prevent TCO + generate_trace(1).print( + std::cerr, + isatty(stderr_fileno), + true, + "Stack trace to reach terminate handler (most recent call first):" + ); + } catch(...) { + if(!detail::should_absorb_trace_exceptions()) { + throw; + } + } } [[noreturn]] void terminate_handler() {