state: parser::RFBGlobalState
}
+#[inline]
+fn handle_incomplete(input: &[u8], current: &[u8], nom_needed: nom::Needed) -> AppLayerResult {
+ if let nom::Needed::Size(needed_size) = nom_needed {
+ if let Some(consumed) = input.len().checked_sub(current.len()) {
+ if let Some(needed) = current.len().checked_add(needed_size) {
+ if consumed <= (std::u32::MAX as usize) && needed <= (std::u32::MAX as usize) {
+ return AppLayerResult::incomplete(consumed as u32, needed as u32);
+ }
+ }
+ }
+ }
+ return AppLayerResult::err();
+}
+
impl RFBState {
pub fn new() -> Self {
Self {
}
}
Err(nom::Err::Incomplete(v)) => {
- if let nom::Needed::Size(n) = v {
- return AppLayerResult::incomplete((input.len() - current.len()) as u32,
- (current.len() + n) as u32);
- }
- return AppLayerResult::err();
+ return handle_incomplete(input, current, v);
}
Err(_) => {
return AppLayerResult::err();
}
}
Err(nom::Err::Incomplete(v)) => {
- if let nom::Needed::Size(n) = v {
- return AppLayerResult::incomplete((input.len() - current.len()) as u32,
- (current.len() + n) as u32);
- }
- return AppLayerResult::err();
+ return handle_incomplete(input, current, v);
}
Err(_) => {
return AppLayerResult::err();
}
}
Err(nom::Err::Incomplete(v)) => {
- if let nom::Needed::Size(n) = v {
- return AppLayerResult::incomplete((input.len() - current.len()) as u32,
- (current.len() + n) as u32);
- }
- return AppLayerResult::err();
+ return handle_incomplete(input, current, v);
}
Err(_) => {
return AppLayerResult::err();
}
}
Err(nom::Err::Incomplete(v)) => {
- if let nom::Needed::Size(n) = v {
- return AppLayerResult::incomplete((input.len() - current.len()) as u32,
- (current.len() + n) as u32);
- }
- return AppLayerResult::err();
+ return handle_incomplete(input, current, v);
}
Err(_) => {
return AppLayerResult::err();
}
}
Err(nom::Err::Incomplete(v)) => {
- if let nom::Needed::Size(n) = v {
- return AppLayerResult::incomplete((input.len() - current.len()) as u32,
- (current.len() + n) as u32);
- }
- return AppLayerResult::err();
+ return handle_incomplete(input, current, v);
}
Err(_) => {
return AppLayerResult::err();
}
}
Err(nom::Err::Incomplete(v)) => {
- if let nom::Needed::Size(n) = v {
- return AppLayerResult::incomplete((input.len() - current.len()) as u32,
- (current.len() + n) as u32);
- }
- return AppLayerResult::err();
+ return handle_incomplete(input, current, v);
}
Err(_) => {
return AppLayerResult::err();
}
}
Err(nom::Err::Incomplete(v)) => {
- if let nom::Needed::Size(n) = v {
- return AppLayerResult::incomplete((input.len() - current.len()) as u32,
- (current.len() + n) as u32);
- }
- return AppLayerResult::err();
+ return handle_incomplete(input, current, v);
}
Err(_) => {
return AppLayerResult::err();
}
}
Err(nom::Err::Incomplete(v)) => {
- if let nom::Needed::Size(n) = v {
- return AppLayerResult::incomplete((input.len() - current.len()) as u32,
- (current.len() + n) as u32);
- }
- return AppLayerResult::err();
+ return handle_incomplete(input, current, v);
}
Err(_) => {
return AppLayerResult::err();
}
}
Err(nom::Err::Incomplete(v)) => {
- if let nom::Needed::Size(n) = v {
- return AppLayerResult::incomplete((input.len() - current.len()) as u32,
- (current.len() + n) as u32);
- }
- return AppLayerResult::err();
+ return handle_incomplete(input, current, v);
}
Err(_) => {
return AppLayerResult::err();
return AppLayerResult::err();
}
Err(nom::Err::Incomplete(v)) => {
- if let nom::Needed::Size(n) = v {
- return AppLayerResult::incomplete((input.len() - current.len()) as u32,
- (current.len() + n) as u32);
- }
- return AppLayerResult::err();
+ return handle_incomplete(input, current, v);
}
Err(_) => {
return AppLayerResult::err();
}
}
Err(nom::Err::Incomplete(v)) => {
- if let nom::Needed::Size(n) = v {
- return AppLayerResult::incomplete((input.len() - current.len()) as u32,
- (current.len() + n) as u32);
- }
- return AppLayerResult::err();
+ return handle_incomplete(input, current, v);
}
Err(_) => {
return AppLayerResult::err();