fix(core): mismatch between malloc and delete in Demangler
Description
In Demangler.cpp we store the return value of abi::__cxa_demangle
in a std::unique.
Doing this implies use of delete when unique_ptr is destroyed, but `abi::__cxa_demangle create char* using malloc, this leads to a mismatch between creation and deletion.
NOTE: No crashes for now, but it pollutes valgrind analysing.
Steps to reproduce
Run valgrind on a sight app.
Proposal
Replace current code by old one (and disable clang-tidy if needed).
diff --git a/libs/core/core/Demangler.cpp b/libs/core/core/Demangler.cpp
index a2ebe2b..428aa3e 100644
--- a/libs/core/core/Demangler.cpp
+++ b/libs/core/core/Demangler.cpp
@@ -85,15 +85,17 @@ std::string Demangler::demangle() const
{
const char* mangled = m_name.c_str();
#ifndef _WIN32
- std::unique_ptr<char> c_demangled = std::unique_ptr<char>(abi::__cxa_demangle(mangled, nullptr, nullptr, nullptr));
+ char* c_demangled = abi::__cxa_demangle(mangled, nullptr, nullptr, nullptr);
std::string res;
- if(c_demangled != nullptr)
+ if(c_demangled)
{
- res = c_demangled.get();
- return res;
+ res = c_demangled;
+ free(c_demangled);
+ }
+ else
+ {
+ res = mangled;
}
-
- res = mangled;
return res;
#else
Or use this patch: Changes-On-a46c9b.patch