Skip to content

Commit

Permalink
detect/integers: add support for negated strings when enum is used
Browse files Browse the repository at this point in the history
function detect_parse_uint_enum can parse strings like !bind_request

Ticket: #7513
  • Loading branch information
AkakiAlice committed Jan 22, 2025
1 parent 95e8427 commit a813902
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions rust/src/detect/uint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use nom7::branch::alt;
use nom7::bytes::complete::{is_a, tag, tag_no_case, take_while};
use nom7::character::complete::{char, digit1, hex_digit1};
use nom7::combinator::{all_consuming, map_opt, opt, value, verify};
use nom7::error::{make_error, ErrorKind};
use nom7::error::{make_error, Error, ErrorKind};
use nom7::Err;
use nom7::IResult;

Expand Down Expand Up @@ -58,15 +58,24 @@ pub struct DetectUintData<T> {
/// And if this fails, will resort to using the enumeration strings.
///
/// Returns Some DetectUintData on success, None on failure
pub fn detect_parse_uint_enum<T1: DetectIntType, T2: EnumString<T1>>(s: &str) -> Option<DetectUintData<T1>> {
pub fn detect_parse_uint_enum<T1: DetectIntType, T2: EnumString<T1>>(
s: &str,
) -> Option<DetectUintData<T1>> {
if let Ok((_, ctx)) = detect_parse_uint::<T1>(s) {
return Some(ctx);
}

let (s, neg) = opt::<&str, _, Error<_>, _>(char('!'))(s).ok()?;
let mode = if neg.is_some() {
DetectUintMode::DetectUintModeNe
} else {
DetectUintMode::DetectUintModeEqual
};
if let Some(enum_val) = T2::from_str(s) {
let ctx = DetectUintData::<T1> {
arg1: enum_val.into_u(),
arg2: T1::min_value(),
mode: DetectUintMode::DetectUintModeEqual,
mode,
};
return Some(ctx);
}
Expand Down

0 comments on commit a813902

Please sign in to comment.