diff options
author | xtkoba <[email protected]> | 2021-04-30 23:03:02 +0900 |
---|---|---|
committer | Yusuke Endoh <[email protected]> | 2022-06-09 20:43:41 +0900 |
commit | 940c8b093de1d903b67b7d80cc33f698a5debf1c (patch) | |
tree | 737111d414a217631b182830a01343ea7537bc62 /addr2line.c | |
parent | 4e21b19a61aadd785df1d731d79265fef16fb7c8 (diff) |
Skip `NULL` values from `dladdr(3)`
Fixes [Bug #17810]
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4438
Diffstat (limited to 'addr2line.c')
-rw-r--r-- | addr2line.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/addr2line.c b/addr2line.c index e102667602..aa0226e341 100644 --- a/addr2line.c +++ b/addr2line.c @@ -2329,8 +2329,8 @@ rb_dump_backtrace_with_lines(int num_traces, void **traces) /* if the binary is strip-ed, this may effect */ for (p=dladdr_fbases; *p; p++) { if (*p == info.dli_fbase) { - lines[i].path = info.dli_fname; - lines[i].sname = info.dli_sname; + if (info.dli_fname) lines[i].path = info.dli_fname; + if (info.dli_sname) lines[i].sname = info.dli_sname; goto next_line; } } @@ -2340,9 +2340,11 @@ rb_dump_backtrace_with_lines(int num_traces, void **traces) obj->base_addr = (uintptr_t)info.dli_fbase; path = info.dli_fname; obj->path = path; - lines[i].path = path; - lines[i].sname = info.dli_sname; - lines[i].saddr = (uintptr_t)info.dli_saddr; + if (path) lines[i].path = path; + if (info.dli_sname) { + lines[i].sname = info.dli_sname; + lines[i].saddr = (uintptr_t)info.dli_saddr; + } strlcpy(binary_filename, path, PATH_MAX); if (fill_lines(num_traces, traces, 1, &obj, lines, i) == (uintptr_t)-1) break; |