Merge pull request #1052 from diath/fix_demangle_name

Fix a possible missing null terminator in the demangle_name output buffer
This commit is contained in:
Konrad Kuśnierz 2019-10-14 08:10:08 +02:00 committed by GitHub
commit 23bc0ab4b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -45,21 +45,25 @@ namespace stdext {
const char* demangle_name(const char* name)
{
static const unsigned BufferSize = 1024;
static char Buffer[1024] = {};
static char Buffer[BufferSize] = {};
#ifdef _MSC_VER
UnDecorateSymbolName(name, Buffer, BufferSize, UNDNAME_COMPLETE);
return Buffer;
int written = UnDecorateSymbolName(name, Buffer, BufferSize - 1, UNDNAME_COMPLETE);
Buffer[written] = '\0';
#else
size_t len;
int status;
char* demangled = abi::__cxa_demangle(name, nullptr, &len, &status);
if(demangled) {
strncpy(Buffer, demangled, BufferSize);
strncpy(Buffer, demangled, BufferSize - 1);
Buffer[BufferSize - 1] = '\0';
free(demangled);
} else {
Buffer[0] = '\0';
}
return Buffer;
#endif
return Buffer;
}
}