@@ -17,7 +17,7 @@ use serde_json;
1717use serde_json:: Value as SJsonValue ;
1818use std:: collections:: HashMap ;
1919use std:: error:: Error ;
20- use std:: ffi:: CString ;
20+ use std:: ffi:: { CStr , CString } ;
2121use std:: ops:: Add ;
2222
2323use super :: state_proof;
@@ -31,7 +31,6 @@ use domain::ledger::constants;
3131use services:: ledger:: merkletree:: merkletree:: MerkleTree ;
3232use services:: pool:: PoolService ;
3333use self :: indy_crypto:: bls:: Generator ;
34- use utils:: cstring:: CStringUtils ;
3534
3635const REQUESTS_FOR_STATE_PROOFS : [ & ' static str ; 7 ] = [
3736 constants:: GET_NYM ,
@@ -294,20 +293,19 @@ impl TransactionHandler {
294293 debug ! ( "TransactionHandler::parse_generic_reply_for_proof_checking: <<< plugin return err {:?}" , err) ;
295294 return None ;
296295 }
297- let parsed_str = CStringUtils :: c_str_to_string ( parsed_c_str) . ok ( ) ??;
296+ let c_str = if parsed_c_str. is_null ( ) { None } else { Some ( unsafe { CStr :: from_ptr ( parsed_c_str) } ) } ;
297+ let parsed_sps = c_str
298+ . and_then ( |c_str| c_str. to_str ( ) . map_err ( map_err_trace ! ( ) ) . ok ( ) )
299+ . and_then ( |c_str|
300+ serde_json:: from_str :: < Vec < ParsedSP > > ( c_str)
301+ . map_err ( |err|
302+ debug ! ( "TransactionHandler::parse_generic_reply_for_proof_checking: <<< can't parse plugin response {}" , err) )
303+ . ok ( ) ) ;
298304
299305 let err = free ( parsed_c_str) ;
300306 trace ! ( "TransactionHandler::parse_generic_reply_for_proof_checking: plugin free res {:?}" , err) ;
301307
302- let parsed_sp = match serde_json:: from_str :: < Vec < ParsedSP > > ( & parsed_str) {
303- Ok ( ps) => ps,
304- Err ( err) => {
305- debug ! ( "TransactionHandler::parse_generic_reply_for_proof_checking: <<< can't parse plugin response {}" , err) ;
306- return None ;
307- } ,
308- } ;
309-
310- Some ( parsed_sp)
308+ parsed_sps
311309 } else {
312310 trace ! ( "TransactionHandler::parse_generic_reply_for_proof_checking: <<< type not supported" ) ;
313311 None
0 commit comments