summaryrefslogtreecommitdiff
path: root/addr2line.c
diff options
context:
space:
mode:
authorxtkoba <69125751+xtkoba@users.noreply.github.com>2021-04-30 23:03:02 +0900
committerYusuke Endoh <mame@ruby-lang.org>2022-06-09 20:43:41 +0900
commit940c8b093de1d903b67b7d80cc33f698a5debf1c (patch)
tree737111d414a217631b182830a01343ea7537bc62 /addr2line.c
parent4e21b19a61aadd785df1d731d79265fef16fb7c8 (diff)
downloadruby-940c8b093de1d903b67b7d80cc33f698a5debf1c.tar.gz
Skip `NULL` values from `dladdr(3)`
Fixes [Bug #17810]
Diffstat (limited to 'addr2line.c')
-rw-r--r--addr2line.c12
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;