@@ -30,6 +30,12 @@ where F: FnMut(&[u8], libc::c_int) -> io::Result<()>
30
30
let ret;
31
31
let fileline_count = {
32
32
let state = unsafe { init_state ( ) } ;
33
+ if state. is_null ( ) {
34
+ return Err ( io:: Error :: new (
35
+ io:: ErrorKind :: Other ,
36
+ "failed to allocate libbacktrace state" )
37
+ )
38
+ }
33
39
let mut fileline_win: & mut [ FileLine ] = & mut fileline_buf;
34
40
let fileline_addr = & mut fileline_win as * mut & mut [ FileLine ] ;
35
41
ret = unsafe {
@@ -62,23 +68,25 @@ pub fn resolve_symname<F>(frame: Frame,
62
68
let symname = {
63
69
let state = unsafe { init_state ( ) } ;
64
70
if state. is_null ( ) {
71
+ return Err ( io:: Error :: new (
72
+ io:: ErrorKind :: Other ,
73
+ "failed to allocate libbacktrace state" )
74
+ )
75
+ }
76
+ let mut data = ptr:: null ( ) ;
77
+ let data_addr = & mut data as * mut * const libc:: c_char ;
78
+ let ret = unsafe {
79
+ backtrace_syminfo ( state,
80
+ frame. symbol_addr as libc:: uintptr_t ,
81
+ syminfo_cb,
82
+ error_cb,
83
+ data_addr as * mut libc:: c_void )
84
+ } ;
85
+ if ret == 0 || data. is_null ( ) {
65
86
None
66
87
} else {
67
- let mut data = ptr:: null ( ) ;
68
- let data_addr = & mut data as * mut * const libc:: c_char ;
69
- let ret = unsafe {
70
- backtrace_syminfo ( state,
71
- frame. symbol_addr as libc:: uintptr_t ,
72
- syminfo_cb,
73
- error_cb,
74
- data_addr as * mut libc:: c_void )
75
- } ;
76
- if ret == 0 || data. is_null ( ) {
77
- None
78
- } else {
79
- unsafe {
80
- CStr :: from_ptr ( data) . to_str ( ) . ok ( )
81
- }
88
+ unsafe {
89
+ CStr :: from_ptr ( data) . to_str ( ) . ok ( )
82
90
}
83
91
}
84
92
} ;
0 commit comments