let mut cur_i = input;
let mut consumed = 0;
while cur_i.len() > 0 {
- let size = match be_u16(&cur_i) as IResult<&[u8],_> {
- Ok((_, len)) => i32::from(len),
+ if cur_i.len() == 1 {
+ return AppLayerResult::incomplete(consumed as u32, 2 as u32);
+ }
+ let size = match be_u16(&cur_i) as IResult<&[u8],u16> {
+ Ok((_, len)) => len,
_ => 0
} as usize;
SCLogDebug!("[request] Have {} bytes, need {} to parse",
SCLogDebug!("[request]Not enough DNS traffic to parse. Returning {}/{}",
consumed as u32, (cur_i.len() - consumed) as u32);
return AppLayerResult::incomplete(consumed as u32,
- (cur_i.len() - consumed) as u32);
+ (size + 2) as u32);
}
}
AppLayerResult::ok()
let mut cur_i = input;
let mut consumed = 0;
while cur_i.len() > 0 {
- let size = match be_u16(&cur_i) as IResult<&[u8],_> {
- Ok((_, len)) => i32::from(len),
+ if cur_i.len() == 1 {
+ return AppLayerResult::incomplete(consumed as u32, 2 as u32);
+ }
+ let size = match be_u16(&cur_i) as IResult<&[u8],u16> {
+ Ok((_, len)) => len,
_ => 0
} as usize;
SCLogDebug!("[response] Have {} bytes, need {} to parse",
SCLogDebug!("[response]Not enough DNS traffic to parse. Returning {}/{}",
consumed as u32, (cur_i.len() - consumed) as u32);
return AppLayerResult::incomplete(consumed as u32,
- (cur_i.len() - consumed) as u32);
+ (size + 2) as u32);
}
}
AppLayerResult::ok()
let mut state = DNSState::new();
assert_eq!(
- AppLayerResult::incomplete(0, 51),
+ AppLayerResult::incomplete(0, 52),
state.parse_request_tcp(&request)
);
}
let mut state = DNSState::new();
assert_eq!(
- AppLayerResult::incomplete(0, 102),
+ AppLayerResult::incomplete(0, 103),
state.parse_response_tcp(&request)
);
}
];
let mut state = DNSState::new();
assert_eq!(
- AppLayerResult::incomplete(0, 14),
+ AppLayerResult::incomplete(0, 30),
state.parse_request_tcp(buf1)
);
assert_eq!(