diff --git a/library/alloc/src/collections/btree/node.rs b/library/alloc/src/collections/btree/node.rs index 6a4c495ea1464..375c8ea8ee7ab 100644 --- a/library/alloc/src/collections/btree/node.rs +++ b/library/alloc/src/collections/btree/node.rs @@ -861,17 +861,14 @@ impl<'a, K, V> Handle, K, V, marker::Leaf>, marker::Edge let kv = unsafe { Handle::new_kv(self.node, self.idx) }; (InsertResult::Fit(kv), ptr) } else { - let middle = unsafe { Handle::new_kv(self.node, B) }; + let middle = unsafe { Handle::new_kv(self.node, B - 1) }; let (mut left, k, v, mut right) = middle.split(); - let ptr = if self.idx <= B { + let ptr = if self.idx < B { unsafe { Handle::new_edge(left.reborrow_mut(), self.idx).insert_fit(key, val) } } else { unsafe { - Handle::new_edge( - right.as_mut().cast_unchecked::(), - self.idx - (B + 1), - ) - .insert_fit(key, val) + Handle::new_edge(right.as_mut().cast_unchecked::(), self.idx - B) + .insert_fit(key, val) } }; (InsertResult::Split(SplitResult { left: left.forget_type(), k, v, right }), ptr) @@ -934,9 +931,9 @@ impl<'a, K, V> Handle, K, V, marker::Internal>, marker:: let kv = unsafe { Handle::new_kv(self.node, self.idx) }; InsertResult::Fit(kv) } else { - let middle = unsafe { Handle::new_kv(self.node, B) }; + let middle = unsafe { Handle::new_kv(self.node, B - 1) }; let (mut left, k, v, mut right) = middle.split(); - if self.idx <= B { + if self.idx < B { unsafe { Handle::new_edge(left.reborrow_mut(), self.idx).insert_fit(key, val, edge); } @@ -944,7 +941,7 @@ impl<'a, K, V> Handle, K, V, marker::Internal>, marker:: unsafe { Handle::new_edge( right.as_mut().cast_unchecked::(), - self.idx - (B + 1), + self.idx - B, ) .insert_fit(key, val, edge); }