Skip to content

Commit

Permalink
fix: changed Ipv4Packet::payload() to not be based on total_length …
Browse files Browse the repository at this point in the history
…which is platform dependant
  • Loading branch information
fujiapple852 committed Oct 15, 2023
1 parent 753c794 commit 7844c47
Showing 1 changed file with 2 additions and 17 deletions.
19 changes: 2 additions & 17 deletions src/tracing/packet/ipv4.rs
Original file line number Diff line number Diff line change
Expand Up @@ -183,10 +183,6 @@ impl<'a> Ipv4Packet<'a> {

pub fn set_payload(&mut self, vals: &[u8]) {
let current_offset = Self::minimum_packet_size() + ipv4_options_length(self);
debug_assert!(
(vals.len() <= ipv4_payload_length(self)),
"vals.len() <= len"
);
self.buf.as_slice_mut()[current_offset..current_offset + vals.len()].copy_from_slice(vals);
}

Expand All @@ -197,26 +193,15 @@ impl<'a> Ipv4Packet<'a> {

#[must_use]
pub fn payload(&self) -> &[u8] {
let start = Self::minimum_packet_size() + ipv4_options_length(self);
let end = std::cmp::min(
Self::minimum_packet_size() + ipv4_options_length(self) + ipv4_payload_length(self),
self.buf.as_slice().len(),
);
if self.buf.as_slice().len() <= start {
return &[];
}
&self.buf.as_slice()[start..end]
let start = Ipv4Packet::minimum_packet_size() + ipv4_options_length(self);
&self.buf.as_slice()[start..]
}
}

fn ipv4_options_length(ipv4: &Ipv4Packet<'_>) -> usize {
(ipv4.get_header_length() as usize * 4).saturating_sub(Ipv4Packet::minimum_packet_size())
}

fn ipv4_payload_length(ipv4: &Ipv4Packet<'_>) -> usize {
(ipv4.get_total_length() as usize).saturating_sub(ipv4.get_header_length() as usize * 4)
}

impl Debug for Ipv4Packet<'_> {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Ipv4Packet")
Expand Down

0 comments on commit 7844c47

Please sign in to comment.