]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
dcerpc/udp: Change fn sign as per rust registration requirement
authorShivani Bhardwaj <shivanib134@gmail.com>
Wed, 19 May 2021 05:46:03 +0000 (11:16 +0530)
committerVictor Julien <victor@inliniac.net>
Fri, 21 May 2021 09:01:26 +0000 (11:01 +0200)
Registering parsers in Rust requires signatures to be a certain way and
compatible with C. Change signatures of all the functions.

rust/src/dcerpc/dcerpc_udp.rs

index f73d160339c3db2515c240e0d89a6469cd56dfd8..60dc99c87858e4b371afe0590d25d3579b0f4a1b 100644 (file)
@@ -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;
-
 }