Use a raii_wrapper for the char array returned by abi::__cxa_demangle

This commit is contained in:
Jeremy Rifkin 2025-02-18 19:48:53 -06:00
parent 9c0d0db884
commit 26ef617c25
No known key found for this signature in database
GPG Key ID: 19AA8270105E8EB4

View File

@ -39,13 +39,14 @@ namespace detail {
// it appears safe to pass nullptr for status however the docs don't explicitly say it's safe so I don't
// want to rely on it
int status;
char* const demangled = abi::__cxa_demangle(to_demangle.get().c_str() + offset, nullptr, nullptr, &status);
auto demangled = raii_wrap(
abi::__cxa_demangle(to_demangle.get().c_str() + offset, nullptr, nullptr, &status),
[] (char* str) { std::free(str); }
);
// demangled will always be nullptr on non-zero status, and if __cxa_demangle ever fails for any reason
// we'll just quietly return the mangled name
if(demangled) {
// TODO: raii_wrap the char*?
std::string str = demangled;
std::free(demangled);
if(demangled.get()) {
std::string str = demangled.get();
if(!rest.empty()) {
str += rest;
}