[llvm] [SampleProfile] Fix UB in Demangler invocation. (PR #137659)
Snehasish Kumar via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 28 09:16:52 PDT 2025
================
@@ -737,14 +737,13 @@ bool SampleProfileMatcher::functionMatchesProfileHelper(
auto FunctionName = FName.str();
if (Demangler.partialDemangle(FunctionName.c_str()))
return std::string();
- constexpr size_t MaxBaseNameSize = 65536;
- std::vector<char> BaseNameBuf(MaxBaseNameSize, 0);
- size_t BaseNameSize = MaxBaseNameSize;
- char *BaseNamePtr =
- Demangler.getFunctionBaseName(BaseNameBuf.data(), &BaseNameSize);
- return (BaseNamePtr && BaseNameSize)
- ? std::string(BaseNamePtr, BaseNameSize)
- : std::string();
+ size_t BaseNameSize = 0;
+ char *BaseNamePtr = Demangler.getFunctionBaseName(nullptr, &BaseNameSize);
+ std::string Result = (BaseNamePtr && BaseNameSize)
+ ? std::string(BaseNamePtr, BaseNameSize)
+ : std::string();
+ free(BaseNamePtr);
----------------
snehasish wrote:
Perhaps add a comment above this to explain the behaviour (nullptr and need to free) and point to https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/a01696.html ?
https://github.com/llvm/llvm-project/pull/137659
More information about the llvm-commits
mailing list