Fix a possible missing null terminator in the demangle_name output buffer

This commit is contained in:
Kamil Chojnowski 2019-10-14 07:56:06 +02:00
parent 1ab18788e6
commit 7a57acd646

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;
}
}