Make sure representation emission covers every octet of the buffer.

Also fix a bug where TcpRepr::emit would not clear the urgent
pointer.
This commit is contained in:
whitequark 2017-06-26 03:44:36 +00:00
parent 050dd788c1
commit 0f0c545755
6 changed files with 14 additions and 11 deletions

View File

@ -392,7 +392,7 @@ mod test {
#[test]
fn test_construct() {
let mut bytes = vec![0; 28];
let mut bytes = vec![0xa5; 28];
let mut packet = Packet::new(&mut bytes);
packet.set_hardware_type(Hardware::Ethernet);
packet.set_protocol_type(Protocol::Ipv4);
@ -429,7 +429,7 @@ mod test {
#[test]
fn test_emit() {
let mut bytes = vec![0; 28];
let mut bytes = vec![0xa5; 28];
let mut packet = Packet::new(&mut bytes);
packet_repr().emit(&mut packet);
assert_eq!(&packet.into_inner()[..], &PACKET_BYTES[..]);

View File

@ -262,7 +262,7 @@ mod test {
#[test]
fn test_construct() {
let mut bytes = vec![0; 64];
let mut bytes = vec![0xa5; 64];
let mut frame = Frame::new(&mut bytes);
frame.set_dst_addr(Address([0x01, 0x02, 0x03, 0x04, 0x05, 0x06]));
frame.set_src_addr(Address([0x11, 0x12, 0x13, 0x14, 0x15, 0x16]));

View File

@ -558,7 +558,7 @@ mod test {
#[test]
fn test_echo_construct() {
let mut bytes = vec![0; 12];
let mut bytes = vec![0xa5; 12];
let mut packet = Packet::new(&mut bytes);
packet.set_msg_type(Message::EchoRequest);
packet.set_msg_code(0);
@ -587,7 +587,7 @@ mod test {
#[test]
fn test_echo_emit() {
let repr = echo_packet_repr();
let mut bytes = vec![0; repr.buffer_len()];
let mut bytes = vec![0xa5; repr.buffer_len()];
let mut packet = Packet::new(&mut bytes);
repr.emit(&mut packet);
assert_eq!(&packet.into_inner()[..], &ECHO_PACKET_BYTES[..]);

View File

@ -590,10 +590,11 @@ mod test {
#[test]
fn test_construct() {
let mut bytes = vec![0; 30];
let mut bytes = vec![0xa5; 30];
let mut packet = Packet::new(&mut bytes);
packet.set_version(4);
packet.set_header_len(20);
packet.clear_flags();
packet.set_dscp(0);
packet.set_ecn(0);
packet.set_total_len(30);
@ -651,7 +652,7 @@ mod test {
#[test]
fn test_emit() {
let repr = packet_repr();
let mut bytes = vec![0; repr.buffer_len() + REPR_PAYLOAD_BYTES.len()];
let mut bytes = vec![0xa5; repr.buffer_len() + REPR_PAYLOAD_BYTES.len()];
let mut packet = Packet::new(&mut bytes);
repr.emit(&mut packet);
packet.payload_mut().copy_from_slice(&REPR_PAYLOAD_BYTES);

View File

@ -723,6 +723,7 @@ impl<'a> Repr<'a> {
TcpOption::EndOfList.emit(options);
}
}
packet.set_urgent_at(0);
packet.payload_mut().copy_from_slice(self.payload);
packet.fill_checksum(src_addr, dst_addr)
}
@ -858,13 +859,14 @@ mod test {
#[test]
fn test_construct() {
let mut bytes = vec![0; PACKET_BYTES.len()];
let mut bytes = vec![0xa5; PACKET_BYTES.len()];
let mut packet = Packet::new(&mut bytes);
packet.set_src_port(48896);
packet.set_dst_port(80);
packet.set_seq_number(SeqNumber(0x01234567));
packet.set_ack_number(SeqNumber(0x89abcdefu32 as i32));
packet.set_header_len(24);
packet.clear_flags();
packet.set_fin(true);
packet.set_syn(false);
packet.set_rst(true);
@ -926,7 +928,7 @@ mod test {
#[test]
fn test_emit() {
let repr = packet_repr();
let mut bytes = vec![0; repr.buffer_len()];
let mut bytes = vec![0xa5; repr.buffer_len()];
let mut packet = Packet::new(&mut bytes);
repr.emit(&mut packet, &SRC_ADDR.into(), &DST_ADDR.into());
assert_eq!(&packet.into_inner()[..], &SYN_PACKET_BYTES[..]);

View File

@ -298,7 +298,7 @@ mod test {
#[test]
fn test_construct() {
let mut bytes = vec![0; 12];
let mut bytes = vec![0xa5; 12];
let mut packet = Packet::new(&mut bytes);
packet.set_src_port(48896);
packet.set_dst_port(53);
@ -335,7 +335,7 @@ mod test {
#[test]
fn test_emit() {
let repr = packet_repr();
let mut bytes = vec![0; repr.buffer_len()];
let mut bytes = vec![0xa5; repr.buffer_len()];
let mut packet = Packet::new(&mut bytes);
repr.emit(&mut packet, &SRC_ADDR.into(), &DST_ADDR.into());
assert_eq!(&packet.into_inner()[..], &PACKET_BYTES[..]);