From 14b6d35b17b3316eb8d30f009ad18dc793e0929b Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sun, 20 Sep 2020 11:30:26 +0800 Subject: [PATCH] common/BackTrace: do not use len for length of demangled symbol it turns out `len` is longer than the length of demangled symbol, let's rely on the `\0` sentry in the returned char* string instead. in this change, use `status` to tell if the demangle is successful or not. Fixes: https://tracker.ceph.com/issues/47552 Signed-off-by: Kefu Chai --- src/common/BackTrace.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/BackTrace.cc b/src/common/BackTrace.cc index 1dfa39cda1762..e6396afe3a739 100644 --- a/src/common/BackTrace.cc +++ b/src/common/BackTrace.cc @@ -52,10 +52,10 @@ std::string BackTrace::demangle(const char* name) // only demangle a C++ mangled name if (mangled.compare(0, 2, "_Z") == 0) { // let __cxa_demangle do the malloc - size_t len = 0; - if (char* demangled = abi::__cxa_demangle(mangled.c_str(), nullptr, &len, &status)) { + char* demangled = abi::__cxa_demangle(mangled.c_str(), nullptr, nullptr, &status); + if (!status) { std::string full_name{OPEN}; - full_name += std::string_view(demangled, len); + full_name += demangled; full_name += end; // buf could be reallocated, so free(demangled) instead free(demangled); -- 2.39.5