Fix IP checksum calculation for odd-length packets.
This commit is contained in:
parent
095005a597
commit
6d2c11fb61
|
@ -107,7 +107,12 @@ pub mod checksum {
|
||||||
pub fn data(data: &[u8]) -> u16 {
|
pub fn data(data: &[u8]) -> u16 {
|
||||||
let mut accum: u32 = 0;
|
let mut accum: u32 = 0;
|
||||||
for i in (0..data.len()).step_by(2) {
|
for i in (0..data.len()).step_by(2) {
|
||||||
let word = NetworkEndian::read_u16(&data[i..i + 2]) as u32;
|
let word;
|
||||||
|
if i + 2 <= data.len() {
|
||||||
|
word = NetworkEndian::read_u16(&data[i..i + 2]) as u32
|
||||||
|
} else {
|
||||||
|
word = (data[i] as u32) << 8
|
||||||
|
}
|
||||||
accum += word;
|
accum += word;
|
||||||
}
|
}
|
||||||
(((accum >> 16) as u16) + (accum as u16))
|
(((accum >> 16) as u16) + (accum as u16))
|
||||||
|
|
Loading…
Reference in New Issue