len: u32, rdir: *mut u8) -> AppProto
{
SCLogDebug!("Probing packet for DCERPC");
- if len == 0 {
+ if len == 0 || input.is_null() {
return core::ALPROTO_UNKNOWN;
}
let slice: &[u8] = std::slice::from_raw_parts(input as *mut u8, len as usize);
len: u32, rdir: *mut u8) -> core::AppProto
{
SCLogDebug!("Probing the packet for DCERPC/UDP");
- if len == 0 {
+ if len == 0 || input.is_null() {
return core::ALPROTO_UNKNOWN;
}
let slice: &[u8] = std::slice::from_raw_parts(input as *mut u8, len as usize);
input_len: u32,
_rdir: *mut u8) -> AppProto
{
- if input_len < DHCP_MIN_FRAME_LEN {
+ if input_len < DHCP_MIN_FRAME_LEN || input.is_null() {
return ALPROTO_UNKNOWN;
}
unsafe extern "C" fn probe_udp(
_flow: *const core::Flow, _dir: u8, input: *const u8, len: u32, rdir: *mut u8,
) -> AppProto {
- if len == 0 || len < std::mem::size_of::<DNSHeader>() as u32 {
+ if input.is_null() || len < std::mem::size_of::<DNSHeader>() as u32 {
return core::ALPROTO_UNKNOWN;
}
let slice: &[u8] = std::slice::from_raw_parts(input as *mut u8, len as usize);
unsafe extern "C" fn c_probe_tcp(
_flow: *const core::Flow, direction: u8, input: *const u8, len: u32, rdir: *mut u8,
) -> AppProto {
- if len == 0 || len < std::mem::size_of::<DNSHeader>() as u32 + 2 {
+ if input.is_null() || len < std::mem::size_of::<DNSHeader>() as u32 + 2 {
return core::ALPROTO_UNKNOWN;
}
let slice: &[u8] = std::slice::from_raw_parts(input as *mut u8, len as usize);
input:*const u8, input_len: u32,
_rdir: *mut u8) -> AppProto
{
+ if input.is_null() {
+ return ALPROTO_UNKNOWN;
+ }
let slice = build_slice!(input,input_len as usize);
let alproto = ALPROTO_KRB5;
if slice.len() <= 10 { return ALPROTO_FAILED; }
input:*const u8, input_len: u32,
rdir: *mut u8) -> AppProto
{
+ if input.is_null() {
+ return ALPROTO_UNKNOWN;
+ }
let slice = build_slice!(input,input_len as usize);
if slice.len() <= 14 { return ALPROTO_FAILED; }
match be_u32(slice) as IResult<&[u8],u32> {
pub extern "C" fn rs_modbus_probe(
_flow: *const core::Flow, _direction: u8, input: *const u8, len: u32, _rdir: *mut u8,
) -> AppProto {
+ if input.is_null() {
+ return ALPROTO_UNKNOWN;
+ }
let slice: &[u8] = unsafe { std::slice::from_raw_parts(input as *mut u8, len as usize) };
match MODBUS_PARSER.probe(slice, Direction::Unknown) {
Status::Recognized => unsafe { ALPROTO_MODBUS },
pub unsafe extern "C" fn rs_mqtt_probing_parser(
_flow: *const Flow, _direction: u8, input: *const u8, input_len: u32, _rdir: *mut u8,
) -> AppProto {
+ if input.is_null() {
+ return ALPROTO_UNKNOWN;
+ }
let buf = build_slice!(input, input_len as usize);
match parse_fixed_header(buf) {
Ok((_, hdr)) => {
direction: u8, input: *const u8,
len: u32, rdir: *mut u8) -> AppProto
{
+ if input.is_null() {
+ return ALPROTO_UNKNOWN;
+ }
let slice: &[u8] = build_slice!(input, len as usize);
SCLogDebug!("rs_nfs_probe_ms: probing direction {:02x}", direction);
let mut adirection : u8 = 0;
_rdir: *mut u8)
-> AppProto
{
+ if input.is_null() {
+ return ALPROTO_UNKNOWN;
+ }
let slice: &[u8] = build_slice!(input, len as usize);
SCLogDebug!("rs_nfs_probe: running probe");
match nfs_probe(slice, direction.into()) {
_rdir: *mut u8)
-> AppProto
{
+ if input.is_null() {
+ return ALPROTO_UNKNOWN;
+ }
let slice: &[u8] = build_slice!(input, len as usize);
match nfs_probe_udp(slice, Direction::ToServer) {
1 => { ALPROTO_NFS },
_rdir: *mut u8)
-> AppProto
{
+ if input.is_null() {
+ return ALPROTO_UNKNOWN;
+ }
let slice: &[u8] = build_slice!(input, len as usize);
match nfs_probe_udp(slice, Direction::ToClient) {
1 => { ALPROTO_NFS },
input:*const u8, input_len: u32,
_rdir: *mut u8) -> AppProto
{
+ if input.is_null() {
+ return ALPROTO_UNKNOWN;
+ }
let slice: &[u8] = unsafe { std::slice::from_raw_parts(input as *mut u8, input_len as usize) };
let alproto = unsafe{ ALPROTO_NTP };
match parse_ntp(slice) {
pub unsafe extern "C" fn rs_quic_probing_parser(
_flow: *const Flow, _direction: u8, input: *const u8, input_len: u32, _rdir: *mut u8,
) -> AppProto {
+ if input.is_null() {
+ return ALPROTO_UNKNOWN;
+ }
let slice = build_slice!(input, input_len as usize);
if QuicHeader::from_bytes(slice, DEFAULT_DCID_LEN).is_ok() {
flags: u8, input: *const u8, len: u32, rdir: *mut u8)
-> AppProto
{
- if len < MIN_REC_SIZE as u32 {
+ if len < MIN_REC_SIZE as u32 || input.is_null() {
return ALPROTO_UNKNOWN;
}
let slice = build_slice!(input, len as usize);
flags: u8, input: *const u8, len: u32, rdir: *mut u8)
-> AppProto
{
- if len < MIN_REC_SIZE as u32 {
+ if len < MIN_REC_SIZE as u32 || input.is_null() {
return ALPROTO_UNKNOWN;
}
let slice = build_slice!(input, len as usize);
input:*const u8,
input_len: u32,
_rdir: *mut u8) -> AppProto {
+ if input.is_null() {
+ return ALPROTO_UNKNOWN;
+ }
let slice = build_slice!(input,input_len as usize);
let alproto = ALPROTO_SNMP;
if slice.len() < 4 { return ALPROTO_FAILED; }