diff --git a/src/ciphers/aes.rs b/src/ciphers/aes.rs index 4616966d5e4..b8cd623d291 100644 --- a/src/ciphers/aes.rs +++ b/src/ciphers/aes.rs @@ -303,7 +303,7 @@ fn key_expansion(init_key: &[Byte], num_rounds: usize) -> Vec { for i in nk..nb * (nr + 1) { let mut temp_word = key[i - 1]; - if i % nk == 0 { + if i.is_multiple_of(nk) { temp_word = sub_word(rot_word(temp_word), AesMode::Encryption) ^ RCON[i / nk]; } else if nk > 6 && i % nk == 4 { temp_word = sub_word(temp_word, AesMode::Encryption); diff --git a/src/data_structures/rb_tree.rs b/src/data_structures/rb_tree.rs index df7d09cb006..5cb6316b150 100644 --- a/src/data_structures/rb_tree.rs +++ b/src/data_structures/rb_tree.rs @@ -367,6 +367,12 @@ unsafe fn delete_fixup(tree: &mut RBTree, mut parent: *mut RBNo let mut sr: *mut RBNode; loop { + // rb-tree will keep color balance up to root, + // if parent is null, we are done. + if parent.is_null() { + break; + } + /* * Loop invariants: * - node is black (or null on first iteration) @@ -647,4 +653,23 @@ mod tests { let s: String = tree.iter().map(|x| x.value).collect(); assert_eq!(s, "hlo orl!"); } + + #[test] + fn delete_edge_case_null_pointer_guard() { + let mut tree = RBTree::::new(); + tree.insert(4, 4); + tree.insert(2, 2); + tree.insert(5, 5); + tree.insert(0, 0); + tree.insert(3, 3); + tree.insert(-1, -1); + tree.insert(1, 1); + tree.insert(-2, -2); + tree.insert(6, 6); + tree.insert(7, 7); + tree.insert(8, 8); + tree.delete(&1); + tree.delete(&3); + tree.delete(&-1); + } } diff --git a/src/general/permutations/steinhaus_johnson_trotter.rs b/src/general/permutations/steinhaus_johnson_trotter.rs index 4784a927ccc..b605ce96a05 100644 --- a/src/general/permutations/steinhaus_johnson_trotter.rs +++ b/src/general/permutations/steinhaus_johnson_trotter.rs @@ -8,7 +8,7 @@ pub fn steinhaus_johnson_trotter_permute(array: &[T]) -> Vec> { res.push(array.clone()); while i < len { if inversion_vector[i] < i { - if i % 2 == 0 { + if i.is_multiple_of(2) { array.swap(0, i); } else { array.swap(inversion_vector[i], i); diff --git a/src/math/prime_numbers.rs b/src/math/prime_numbers.rs index f045133a168..a1cf41d4012 100644 --- a/src/math/prime_numbers.rs +++ b/src/math/prime_numbers.rs @@ -9,7 +9,7 @@ pub fn prime_numbers(max: usize) -> Vec { let mut status = true; for j in (3..stop).step_by(2) { - if i % j == 0 { + if i.is_multiple_of(j) { status = false; break; }