@@ -35,10 +35,10 @@ use binaryninjacore_sys::{
3535} ;
3636
3737use crate :: rc:: { Ref , RefCountable } ;
38- use crate :: string:: { BnString , IntoCStr } ;
38+ use crate :: string:: { raw_to_string , BnString , IntoCStr } ;
3939use log;
4040use log:: LevelFilter ;
41- use std:: ffi:: { CStr , CString } ;
41+ use std:: ffi:: CString ;
4242use std:: os:: raw:: { c_char, c_void} ;
4343use std:: ptr:: NonNull ;
4444
@@ -138,15 +138,14 @@ impl log::Log for Ref<Logger> {
138138 } ;
139139
140140 if let Ok ( msg) = CString :: new ( format ! ( "{}" , record. args( ) ) ) {
141- let percent_s = CString :: new ( "%s" ) . expect ( "'%s' has no null bytes" ) ;
142141 let logger_name = self . name ( ) . to_cstr ( ) ;
143142 unsafe {
144143 BNLog (
145144 self . session_id ( ) ,
146145 level,
147146 logger_name. as_ptr ( ) ,
148147 0 ,
149- percent_s . as_ptr ( ) ,
148+ c"%s" . as_ptr ( ) ,
150149 msg. as_ptr ( ) ,
151150 ) ;
152151 }
@@ -160,7 +159,7 @@ unsafe impl Send for Logger {}
160159unsafe impl Sync for Logger { }
161160
162161pub trait LogListener : ' static + Sync {
163- fn log ( & self , session : usize , level : Level , msg : & CStr , logger_name : & CStr , tid : usize ) ;
162+ fn log ( & self , session : usize , level : Level , msg : & str , logger_name : & str , tid : usize ) ;
164163 fn level ( & self ) -> Level ;
165164 fn close ( & self ) { }
166165}
@@ -220,13 +219,9 @@ extern "C" fn cb_log<L>(
220219{
221220 ffi_wrap ! ( "LogListener::log" , unsafe {
222221 let listener = & * ( ctxt as * const L ) ;
223- listener. log(
224- session,
225- level,
226- CStr :: from_ptr( msg) ,
227- CStr :: from_ptr( logger_name) ,
228- tid,
229- ) ;
222+ let msg_str = raw_to_string( msg) . unwrap( ) ;
223+ let logger_name_str = raw_to_string( logger_name) . unwrap( ) ;
224+ listener. log( session, level, & msg_str, & logger_name_str, tid) ;
230225 } )
231226}
232227
0 commit comments