utils: Safely handle NULL pointers returned by dladdr
This commit is contained in:
committed by
Mathias Agopian
parent
b351086bc4
commit
8ac45bb391
@@ -149,14 +149,16 @@ io::ostream& operator<<(io::ostream& stream, CallStack const& UTILS_UNUSED calls
|
||||
void* pc = (void*)callstack[i];
|
||||
#if HAS_DLADDR
|
||||
if (::dladdr(pc, &info)) {
|
||||
char const* exe = strrchr(info.dli_fname, '/');
|
||||
char const* fname = info.dli_fname ? info.dli_fname : "<unknown>";
|
||||
char const* sname = info.dli_sname ? info.dli_sname : "<unknown>";
|
||||
char const* exe = strrchr(fname, '/');
|
||||
snprintf(buf, sizeof(buf), "#%u\t%-31s %*p %s + %zd\n",
|
||||
unsigned(i),
|
||||
exe ? exe + 1 : info.dli_fname,
|
||||
exe ? exe + 1 : fname,
|
||||
int(2 + sizeof(void*)*2),
|
||||
pc,
|
||||
CallStack::demangle(info.dli_sname).c_str(),
|
||||
(char *)callstack[i] - (char *)info.dli_saddr);
|
||||
CallStack::demangle(sname).c_str(),
|
||||
(char *)callstack[i] - (char *)(info.dli_saddr ? info.dli_saddr : pc));
|
||||
stream << buf;
|
||||
} else
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user