From 3000e963d568bfea999efd4148496ff485ffa4ed Mon Sep 17 00:00:00 2001 From: Jason Ish Date: Tue, 22 Oct 2024 10:46:13 -0600 Subject: [PATCH] rust/applayer: use c_int as return type for get_info_by_id Rust was using i8 as the return type, while C uses int. As of Rust 1.82, the return value is turned to garbage over the FFI boundary. Ticket: #7338 (cherry picked from commit 45384ef969d180d962f4b50f19556c5e2c5cfccc) --- rust/derive/src/applayerevent.rs | 2 +- rust/src/applayer.rs | 6 +++--- rust/src/smb/smb.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/rust/derive/src/applayerevent.rs b/rust/derive/src/applayerevent.rs index 29475fa2d51b..990d5e664f85 100644 --- a/rust/derive/src/applayerevent.rs +++ b/rust/derive/src/applayerevent.rs @@ -98,7 +98,7 @@ pub fn derive_app_layer_event(input: TokenStream) -> TokenStream { event_id: std::os::raw::c_int, event_name: *mut *const std::os::raw::c_char, event_type: *mut #crate_id::core::AppLayerEventType, - ) -> i8 { + ) -> std::os::raw::c_int { #crate_id::applayer::get_event_info_by_id::<#name>(event_id, event_name, event_type) } diff --git a/rust/src/applayer.rs b/rust/src/applayer.rs index ff19d8763234..113aa238b370 100644 --- a/rust/src/applayer.rs +++ b/rust/src/applayer.rs @@ -445,7 +445,7 @@ pub type StateGetTxFn = unsafe extern "C" fn (*mut c_void, u64) -> *m pub type StateGetTxCntFn = unsafe extern "C" fn (*mut c_void) -> u64; pub type StateGetProgressFn = unsafe extern "C" fn (*mut c_void, u8) -> c_int; pub type GetEventInfoFn = unsafe extern "C" fn (*const c_char, *mut c_int, *mut AppLayerEventType) -> c_int; -pub type GetEventInfoByIdFn = unsafe extern "C" fn (c_int, *mut *const c_char, *mut AppLayerEventType) -> i8; +pub type GetEventInfoByIdFn = unsafe extern "C" fn (c_int, *mut *const c_char, *mut AppLayerEventType) -> c_int; pub type LocalStorageNewFn = extern "C" fn () -> *mut c_void; pub type LocalStorageFreeFn = extern "C" fn (*mut c_void); pub type GetTxFilesFn = unsafe extern "C" fn (*mut c_void, *mut c_void, u8) -> AppLayerGetFileState; @@ -587,7 +587,7 @@ pub trait AppLayerEvent { event_id: std::os::raw::c_int, event_name: *mut *const std::os::raw::c_char, event_type: *mut core::AppLayerEventType, - ) -> i8; + ) -> std::os::raw::c_int; } /// Generic `get_info_info` implementation for enums implementing @@ -631,7 +631,7 @@ pub unsafe fn get_event_info_by_id( event_id: std::os::raw::c_int, event_name: *mut *const std::os::raw::c_char, event_type: *mut core::AppLayerEventType, -) -> i8 { +) -> std::os::raw::c_int { if let Some(e) = T::from_id(event_id) { *event_name = e.to_cstring().as_ptr() as *const std::os::raw::c_char; *event_type = core::AppLayerEventType::APP_LAYER_EVENT_TYPE_TRANSACTION; diff --git a/rust/src/smb/smb.rs b/rust/src/smb/smb.rs index e64e0a8e6f0b..53058890b1b0 100644 --- a/rust/src/smb/smb.rs +++ b/rust/src/smb/smb.rs @@ -2229,7 +2229,7 @@ pub unsafe extern "C" fn rs_smb_state_get_event_info_by_id( event_id: std::os::raw::c_int, event_name: *mut *const std::os::raw::c_char, event_type: *mut AppLayerEventType, -) -> i8 { +) -> std::os::raw::c_int { SMBEvent::get_event_info_by_id(event_id, event_name, event_type) }