From: Kefu Chai Date: Sun, 20 Sep 2020 03:30:26 +0000 (+0800) Subject: common/BackTrace: do not use len for length of demangled symbol X-Git-Tag: v17.0.0~1068^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=14b6d35b17b3316eb8d30f009ad18dc793e0929b;p=ceph-ci.git 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 --- diff --git a/src/common/BackTrace.cc b/src/common/BackTrace.cc index 1dfa39cda17..e6396afe3a7 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);