about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2017-09-06 22:13:59 -0700
committerAlex Crichton <alex@alexcrichton.com>2017-09-06 22:14:34 -0700
commitf633284b3da04a6eb2f6525e51efd81de6320f2e (patch)
treef90f8a44573854728f2618c561fd108c374bb402 /src/libstd
parent2f1ef9ef1181298d46e79d5dde6bafeb6483926f (diff)
downloadrust-f633284b3da04a6eb2f6525e51efd81de6320f2e.tar.gz
rust-f633284b3da04a6eb2f6525e51efd81de6320f2e.zip
std: Fix a segfault on OSX with backtraces
Apparently `dladdr` can succeed but still give you NULL pointers!

Closes #44379
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/sys/unix/backtrace/printing/dladdr.rs3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/libstd/sys/unix/backtrace/printing/dladdr.rs b/src/libstd/sys/unix/backtrace/printing/dladdr.rs
index 05a071a7978..2c0cda2c8f1 100644
--- a/src/libstd/sys/unix/backtrace/printing/dladdr.rs
+++ b/src/libstd/sys/unix/backtrace/printing/dladdr.rs
@@ -22,7 +22,8 @@ pub fn resolve_symname<F>(frame: Frame,
 {
     unsafe {
         let mut info: Dl_info = intrinsics::init();
-        let symname = if dladdr(frame.exact_position, &mut info) == 0 {
+        let symname = if dladdr(frame.exact_position, &mut info) == 0 ||
+                         info.dli_sname.is_null() {
             None
         } else {
             CStr::from_ptr(info.dli_sname).to_str().ok()