Skip to content

Commit 01f35b3

Browse files
committed
fix UB in VecDeque::shrink_to
1 parent 26c9868 commit 01f35b3

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

Diff for: library/alloc/src/collections/vec_deque/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -981,7 +981,7 @@ impl<T, A: Allocator> VecDeque<T, A> {
981981
unsafe {
982982
self.copy_nonoverlapping(target_cap, 0, len);
983983
}
984-
} else if self.head >= target_cap {
984+
} else if !self.is_contiguous() {
985985
// H := head
986986
// L := last element
987987
// L H

Diff for: library/alloc/src/collections/vec_deque/tests.rs

+12
Original file line numberDiff line numberDiff line change
@@ -1130,3 +1130,15 @@ fn issue_80303() {
11301130
assert_eq!(vda, vdb);
11311131
assert_eq!(hash_code(vda), hash_code(vdb));
11321132
}
1133+
1134+
#[test]
1135+
fn issue_108453_shrink_to() {
1136+
let mut deque = VecDeque::with_capacity(10);
1137+
1138+
deque.push_back(1u8);
1139+
deque.push_front(10);
1140+
deque.push_front(9);
1141+
deque.shrink_to(9);
1142+
1143+
assert_eq!(deque, [9, 10, 1]);
1144+
}

0 commit comments

Comments
 (0)