In r268463, I misplaced a return in demangle(), causing the function to
erroneously skip symbols that were not mangled at all. Fix this by moving the return into the preceding if block. While here, simplify the code by letting __cxa_demangle() allocate the needed space for the demangled symbol. This also fixes a memory leak, which would occur whenever __cxa_demangle() failed. Reported by: pgj MFC after: 3 days
This commit is contained in:
parent
d77c4024e5
commit
96ec3cdd8e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=269750
@ -57,21 +57,15 @@ demangle(const char *symbol, char *buf, size_t len)
|
||||
{
|
||||
#ifndef NO_CXA_DEMANGLE
|
||||
char *dembuf;
|
||||
size_t demlen;
|
||||
|
||||
if (symbol[0] == '_' && symbol[1] == 'Z' && symbol[2]) {
|
||||
dembuf = malloc(len);
|
||||
if (!dembuf)
|
||||
goto fail;
|
||||
demlen = len;
|
||||
dembuf = __cxa_demangle(symbol, dembuf, &demlen, NULL);
|
||||
dembuf = __cxa_demangle(symbol, NULL, NULL, NULL);
|
||||
if (!dembuf)
|
||||
goto fail;
|
||||
strlcpy(buf, dembuf, len);
|
||||
free(dembuf);
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
fail:
|
||||
#endif /* NO_CXA_DEMANGLE */
|
||||
strlcpy(buf, symbol, len);
|
||||
|
Loading…
Reference in New Issue
Block a user