about summary refs log tree commit diff
path: root/src/libstd/sys/unix/backtrace
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2017-09-10 14:03:25 +0200
committerGitHub <noreply@github.com>2017-09-10 14:03:25 +0200
commit0e2dac7eba8b96d3210612538725aab19d8d297f (patch)
treece1d3d6f3a12422e2211c6b16a59148c6e679d94 /src/libstd/sys/unix/backtrace
parent1e4ab871f5e548fa181d644691f693722d8fc6ba (diff)
parentf633284b3da04a6eb2f6525e51efd81de6320f2e (diff)
downloadrust-0e2dac7eba8b96d3210612538725aab19d8d297f.tar.gz
rust-0e2dac7eba8b96d3210612538725aab19d8d297f.zip
Rollup merge of #44384 - alexcrichton:osx-segfault, r=estebank
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/sys/unix/backtrace')
-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 3a3912af021..21f0b3724c1 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()