}
pub fn parse_rpc_packet_header(i: &[u8]) -> IResult<&[u8], RpcPacketHeader> {
- let (i, fraghdr) = parse_bits(i)?;
+ let (i, fraghdr) = verify(parse_bits, |v: &(u8,u32)| v.1 >= 24)(i)?;
let (i, xid) = be_u32(i)?;
- let (i, msgtype) = be_u32(i)?;
+ let (i, msgtype) = verify(be_u32, |&v| v <= 1)(i)?;
let hdr = RpcPacketHeader {
frag_is_last: fraghdr.0 == 1,
frag_len: fraghdr.1,
let (i, hdr) = parse_rpc_packet_header(start_i)?;
let rec_size = hdr.frag_len + 4;
- let (i, reply_state) = be_u32(i)?;
+ let (i, reply_state) = verify(be_u32, |&v| v <= 1)(i)?;
let (i, verifier_flavor) = be_u32(i)?;
let (i, verifier_len) = verify(be_u32, |&size| size < RPC_MAX_VERIFIER_SIZE)(i)?;
pub fn parse_rpc_udp_packet_header(i: &[u8]) -> IResult<&[u8], RpcPacketHeader> {
let (i, xid) = be_u32(i)?;
- let (i, msgtype) = be_u32(i)?;
+ let (i, msgtype) = verify(be_u32, |&v| v <= 1)(i)?;
let hdr = RpcPacketHeader {
frag_is_last: false,
frag_len: 0,
let (i, verifier_len) = verify(be_u32, |&size| size < RPC_MAX_VERIFIER_SIZE)(i)?;
let (i, verifier) = cond(verifier_len > 0, take(verifier_len as usize))(i)?;
- let (i, reply_state) = be_u32(i)?;
+ let (i, reply_state) = verify(be_u32, |&v| v <= 1)(i)?;
let (i, accept_state) = be_u32(i)?;
let data_size : u32 = i.len() as u32;