From 8d1840f5950397385ac81b5f56bdd9dac35ae657 Mon Sep 17 00:00:00 2001 From: Jason Ish Date: Tue, 26 Apr 2022 14:59:18 -0600 Subject: [PATCH] frames(rust): don't call into C if running Rust unit tests Wrap the calls behind frames to C code if a `cfg!(not(test))` so they don't get compiled when running Rust unit tests. Linkage to C functions is not yet available for Rust unit tests, and this will keep the check out of individual parsers. Ticket: 4984 --- rust/src/frames.rs | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/rust/src/frames.rs b/rust/src/frames.rs index a9079d0dc1..14d7ff8e45 100644 --- a/rust/src/frames.rs +++ b/rust/src/frames.rs @@ -52,19 +52,25 @@ impl Frame { ) -> Option { let offset = frame_start.as_ptr() as usize - stream_slice.as_slice().as_ptr() as usize; SCLogDebug!("offset {} stream_slice.len() {} frame_start.len() {}", offset, stream_slice.len(), frame_start.len()); - let frame = unsafe { - AppLayerFrameNewByRelativeOffset( - flow, - stream_slice, - offset as u32, - frame_len, - dir, - frame_type, - ) - }; - let id = unsafe { AppLayerFrameGetId(frame) }; - if id > 0 { - Some(Self { id }) + // If running Rust unit tests this won't be compiled and None will be returned, as we don't + // have the Suricata C code available for linkage. + if cfg!(not(test)) { + let frame = unsafe { + AppLayerFrameNewByRelativeOffset( + flow, + stream_slice, + offset as u32, + frame_len, + dir, + frame_type, + ) + }; + let id = unsafe { AppLayerFrameGetId(frame) }; + if id > 0 { + Some(Self { id }) + } else { + None + } } else { None }