From: Jason Ish Date: Tue, 26 Apr 2022 20:59:18 +0000 (-0600) Subject: frames(rust): don't call into C if running Rust unit tests X-Git-Tag: suricata-7.0.0-beta1~645 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8d1840f5950397385ac81b5f56bdd9dac35ae657;p=thirdparty%2Fsuricata.git 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 --- 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 }