diff --git a/src/crc128.rs b/src/crc128.rs index d346e97..5a04156 100644 --- a/src/crc128.rs +++ b/src/crc128.rs @@ -78,6 +78,8 @@ const fn update_slice16( let len = bytes.len(); if reflect { while i + 16 < len { + assert!((i + 15) < len); + let current0 = bytes[i] ^ crc as u8; let current1 = bytes[i + 1] ^ (crc >> 8) as u8; let current2 = bytes[i + 2] ^ (crc >> 16) as u8; @@ -122,6 +124,8 @@ const fn update_slice16( } } else { while i + 16 < len { + assert!((i + 15) < len); + let current0 = bytes[i] ^ (crc >> 120) as u8; let current1 = bytes[i + 1] ^ (crc >> 112) as u8; let current2 = bytes[i + 2] ^ (crc >> 104) as u8; diff --git a/src/crc16.rs b/src/crc16.rs index b82d949..806765c 100644 --- a/src/crc16.rs +++ b/src/crc16.rs @@ -77,6 +77,8 @@ const fn update_slice16( let mut i = 0; if reflect { while i + 16 < len { + assert!((i + 15) < len); + let current0 = bytes[i] ^ (crc as u8); let current1 = bytes[i + 1] ^ ((crc >> 8) as u8); @@ -107,6 +109,8 @@ const fn update_slice16( } } else { while i + 16 < len { + assert!((i + 15) < len); + let current0 = bytes[i] ^ ((crc >> 8) as u8); let current1 = bytes[i + 1] ^ (crc as u8); diff --git a/src/crc32.rs b/src/crc32.rs index 063814f..83269bf 100644 --- a/src/crc32.rs +++ b/src/crc32.rs @@ -76,8 +76,11 @@ const fn update_slice16( bytes: &[u8], ) -> u32 { let mut i = 0; + let len = bytes.len(); if reflect { - while i + 16 <= bytes.len() { + while i + 16 <= len { + assert!((i + 15) < len); + let mut current_slice = [bytes[i], bytes[i + 1], bytes[i + 2], bytes[i + 3]]; current_slice[0] ^= crc as u8; @@ -106,13 +109,15 @@ const fn update_slice16( } // Last few bytes - while i < bytes.len() { + while i < len{ let table_index = ((crc ^ bytes[i] as u32) & 0xFF) as usize; crc = table[0][table_index] ^ (crc >> 8); i += 1; } } else { - while i + 16 <= bytes.len() { + while i + 16 <= len { + assert!((i + 15) < len); + let mut current_slice = [bytes[i], bytes[i + 1], bytes[i + 2], bytes[i + 3]]; current_slice[0] ^= (crc >> 24) as u8; @@ -141,7 +146,7 @@ const fn update_slice16( } // Last few bytes - while i < bytes.len() { + while i < len { let table_index = (((crc >> 24) ^ bytes[i] as u32) & 0xFF) as usize; crc = table[0][table_index] ^ (crc << 8); i += 1; diff --git a/src/crc64.rs b/src/crc64.rs index 3fc3233..5380f58 100644 --- a/src/crc64.rs +++ b/src/crc64.rs @@ -79,6 +79,8 @@ const fn update_slice16( let len = bytes.len(); if reflect { while i + 16 < len { + assert!((i + 15) < len); + let current0 = bytes[i] ^ crc as u8; let current1 = bytes[i + 1] ^ (crc >> 8) as u8; let current2 = bytes[i + 2] ^ (crc >> 16) as u8; @@ -115,6 +117,8 @@ const fn update_slice16( } } else { while i + 16 < len { + assert!((i + 15) < len); + let current0 = bytes[i] ^ (crc >> 56) as u8; let current1 = bytes[i + 1] ^ (crc >> 48) as u8; let current2 = bytes[i + 2] ^ (crc >> 40) as u8; diff --git a/src/crc8.rs b/src/crc8.rs index d075100..804df8b 100644 --- a/src/crc8.rs +++ b/src/crc8.rs @@ -58,6 +58,8 @@ const fn update_slice16(mut crc: u8, table: &[[u8; 256]; 16], bytes: &[u8]) -> u let mut i = 0; while i + 16 < len { + assert!((i + 15) < len); + crc = table[0][bytes[i + 15] as usize] ^ table[1][bytes[i + 14] as usize] ^ table[2][bytes[i + 13] as usize]