From 4a0143c8d408de599e412ab2e91928238e252fb7 Mon Sep 17 00:00:00 2001 From: Philippe Antoine Date: Thu, 5 Mar 2026 21:57:40 +0100 Subject: [PATCH] rust/ffi: move cast_pointer macro to ffi crate Ticket: 7666 --- examples/plugins/altemplate/src/detect.rs | 2 +- examples/plugins/altemplate/src/log.rs | 2 +- examples/plugins/altemplate/src/template.rs | 4 ++-- rust/ffi/src/lib.rs | 10 ++++++++++ rust/src/applayer.rs | 8 +------- rust/src/lib.rs | 2 ++ 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/examples/plugins/altemplate/src/detect.rs b/examples/plugins/altemplate/src/detect.rs index 4cc2e910f9..75be2998ad 100644 --- a/examples/plugins/altemplate/src/detect.rs +++ b/examples/plugins/altemplate/src/detect.rs @@ -22,10 +22,10 @@ use super::template::{TemplateTransaction, ALPROTO_TEMPLATE}; use std::os::raw::{c_int, c_void}; -use suricata::cast_pointer; use suricata::core::{STREAM_TOCLIENT, STREAM_TOSERVER}; use suricata::detect::{helper_keyword_register_sticky_buffer, SigTableElmtStickyBuffer}; use suricata::direction::Direction; +use suricata_ffi::cast_pointer; use suricata_sys::sys::{ DetectEngineCtx, SCDetectBufferSetActiveList, SCDetectHelperBufferMpmRegister, SCDetectSignatureSetAppProto, Signature, diff --git a/examples/plugins/altemplate/src/log.rs b/examples/plugins/altemplate/src/log.rs index 5e07f5ec6a..1154e9f518 100644 --- a/examples/plugins/altemplate/src/log.rs +++ b/examples/plugins/altemplate/src/log.rs @@ -21,7 +21,7 @@ // use the plugin-facing FFI JsonBuilder wrapper use super::template::TemplateTransaction; -use suricata::cast_pointer; +use suricata_ffi::cast_pointer; use suricata_ffi::jsonbuilder::{Error as JsonError, JsonBuilder}; use suricata_sys::sys::SCJsonBuilder; diff --git a/examples/plugins/altemplate/src/template.rs b/examples/plugins/altemplate/src/template.rs index eb697a54a8..d9cb65fe73 100644 --- a/examples/plugins/altemplate/src/template.rs +++ b/examples/plugins/altemplate/src/template.rs @@ -32,8 +32,8 @@ use suricata::applayer::{ }; use suricata::applayer::{AppLayerResultRust, StreamSliceRust}; use suricata::conf::conf_get; -use suricata::{build_slice, cast_pointer, export_state_data_get, export_tx_data_get}; -use suricata_ffi::{SCLogError, SCLogNotice, IPPROTO_TCP}; +use suricata::{build_slice, export_state_data_get, export_tx_data_get}; +use suricata_ffi::{cast_pointer, SCLogError, SCLogNotice, IPPROTO_TCP}; use suricata_sys::sys::AppProtoEnum::ALPROTO_UNKNOWN; use suricata_sys::sys::{ AppLayerParser, AppLayerParserState, AppLayerProtocolDetect, AppLayerResult, AppLayerStateData, diff --git a/rust/ffi/src/lib.rs b/rust/ffi/src/lib.rs index 4987a87c98..b351ca3bac 100644 --- a/rust/ffi/src/lib.rs +++ b/rust/ffi/src/lib.rs @@ -22,3 +22,13 @@ pub mod plugin; pub const IPPROTO_TCP: u8 = 6; pub const IPPROTO_UDP: u8 = 17; + +/// Cast pointer to a variable, as a mutable reference to an object +/// +/// UNSAFE ! +#[macro_export] +macro_rules! cast_pointer { + ($ptr:ident, $ty:ty) => { + &mut *($ptr as *mut $ty) + }; +} diff --git a/rust/src/applayer.rs b/rust/src/applayer.rs index 43da73d148..d1fc413c79 100644 --- a/rust/src/applayer.rs +++ b/rust/src/applayer.rs @@ -39,13 +39,7 @@ pub use suricata_sys::sys::{ #[cfg(not(test))] use suricata_sys::sys::SCAppLayerDecoderEventsSetEventRaw; -/// Cast pointer to a variable, as a mutable reference to an object -/// -/// UNSAFE ! -#[macro_export] -macro_rules! cast_pointer { - ($ptr:ident, $ty:ty) => ( &mut *($ptr as *mut $ty) ); -} +pub use suricata_ffi::cast_pointer; pub trait StreamSliceRust { #[cfg(test)] diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 51f9824af9..b0ff6c1c57 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -53,6 +53,8 @@ // example static_mut_refs. #![allow(unknown_lints)] +#[macro_use] +extern crate suricata_ffi; #[macro_use] extern crate bitflags; extern crate byteorder;