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) const char* demangle_name(const char* name)
{ {
static const unsigned BufferSize = 1024; static const unsigned BufferSize = 1024;
static char Buffer[1024] = {}; static char Buffer[BufferSize] = {};
#ifdef _MSC_VER #ifdef _MSC_VER
UnDecorateSymbolName(name, Buffer, BufferSize, UNDNAME_COMPLETE); int written = UnDecorateSymbolName(name, Buffer, BufferSize - 1, UNDNAME_COMPLETE);
return Buffer; Buffer[written] = '\0';
#else #else
size_t len; size_t len;
int status; int status;
char* demangled = abi::__cxa_demangle(name, nullptr, &len, &status); char* demangled = abi::__cxa_demangle(name, nullptr, &len, &status);
if(demangled) { if(demangled) {
strncpy(Buffer, demangled, BufferSize); strncpy(Buffer, demangled, BufferSize - 1);
Buffer[BufferSize - 1] = '\0';
free(demangled); free(demangled);
} else {
Buffer[0] = '\0';
} }
return Buffer;
#endif #endif
return Buffer;
} }
} }