From: Shivani Bhardwaj Date: Wed, 19 May 2021 05:46:03 +0000 (+0530) Subject: dcerpc/udp: Change fn sign as per rust registration requirement X-Git-Tag: suricata-7.0.0-beta1~1615 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d7007424bdc2cf99b5641085159bede06802c4e4;p=thirdparty%2Fsuricata.git dcerpc/udp: Change fn sign as per rust registration requirement Registering parsers in Rust requires signatures to be a certain way and compatible with C. Change signatures of all the functions. --- diff --git a/rust/src/dcerpc/dcerpc_udp.rs b/rust/src/dcerpc/dcerpc_udp.rs index f73d160339..60dc99c878 100644 --- a/rust/src/dcerpc/dcerpc_udp.rs +++ b/rust/src/dcerpc/dcerpc_udp.rs @@ -208,9 +208,10 @@ impl DCERPCUDPState { #[no_mangle] pub extern "C" fn rs_dcerpc_udp_parse( - _flow: *mut core::Flow, state: &mut DCERPCUDPState, _pstate: *mut std::os::raw::c_void, - input: *const u8, input_len: u32, _data: *mut std::os::raw::c_void, _flags: u8, + _flow: *const core::Flow, state: *mut std::os::raw::c_void, _pstate: *mut std::os::raw::c_void, + input: *const u8, input_len: u32, _data: *const std::os::raw::c_void, _flags: u8, ) -> AppLayerResult { + let state = cast_pointer!(state, DCERPCUDPState); if input_len > 0 && input != std::ptr::null_mut() { let buf = build_slice!(input, input_len as usize); return state.handle_input_data(buf); @@ -224,10 +225,10 @@ pub extern "C" fn rs_dcerpc_udp_state_free(state: *mut std::os::raw::c_void) { } #[no_mangle] -pub unsafe extern "C" fn rs_dcerpc_udp_state_new(_orig_state: *mut std::os::raw::c_void, _orig_proto: core::AppProto) -> *mut std::os::raw::c_void { +pub extern "C" fn rs_dcerpc_udp_state_new(_orig_state: *mut std::os::raw::c_void, _orig_proto: core::AppProto) -> *mut std::os::raw::c_void { let state = DCERPCUDPState::new(); let boxed = Box::new(state); - transmute(boxed) + return unsafe { transmute(boxed) }; } #[no_mangle] @@ -252,8 +253,8 @@ pub extern "C" fn rs_dcerpc_udp_get_tx_detect_state( #[no_mangle] pub extern "C" fn rs_dcerpc_udp_set_tx_detect_state( - vtx: *mut std::os::raw::c_void, de_state: *mut core::DetectEngineState, -) -> u8 { + vtx: *mut std::os::raw::c_void, de_state: &mut core::DetectEngineState, +) -> std::os::raw::c_int { let dce_state = cast_pointer!(vtx, DCERPCTransaction); dce_state.de_state = Some(de_state); 0 @@ -271,11 +272,11 @@ pub extern "C" fn rs_dcerpc_udp_get_tx_data( #[no_mangle] pub extern "C" fn rs_dcerpc_udp_get_tx( state: *mut std::os::raw::c_void, tx_id: u64, -) -> *mut DCERPCTransaction { +) -> *mut std::os::raw::c_void { let dce_state = cast_pointer!(state, DCERPCUDPState); match dce_state.get_tx(tx_id) { Some(tx) => { - return unsafe{&mut *(tx as *mut DCERPCTransaction)}; + return unsafe{ transmute(tx) }; }, None => { return std::ptr::null_mut(); @@ -329,7 +330,6 @@ pub extern "C" fn rs_dcerpc_probe_udp(direction: u8, input: *const u8, return 1; } return 0; - }