From: Hans Kratz Date: Mon, 18 Oct 2021 11:15:45 +0000 (+0200) Subject: Avoid overflow in `VecDeque::with_capacity_in()`. X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=4a37b9cbffdc9ba66e9e4b7a17cb0de157a647f8;p=rust.git Avoid overflow in `VecDeque::with_capacity_in()`. --- diff --git a/library/alloc/src/collections/vec_deque/mod.rs b/library/alloc/src/collections/vec_deque/mod.rs index c890ff4ac5e..de607c8fdab 100644 --- a/library/alloc/src/collections/vec_deque/mod.rs +++ b/library/alloc/src/collections/vec_deque/mod.rs @@ -543,9 +543,9 @@ pub fn new_in(alloc: A) -> VecDeque { /// ``` #[unstable(feature = "allocator_api", issue = "32838")] pub fn with_capacity_in(capacity: usize, alloc: A) -> VecDeque { + assert!(capacity < 1_usize << usize::BITS - 1, "capacity overflow"); // +1 since the ringbuffer always leaves one space empty let cap = cmp::max(capacity + 1, MINIMUM_CAPACITY + 1).next_power_of_two(); - assert!(cap > capacity, "capacity overflow"); VecDeque { tail: 0, head: 0, buf: RawVec::with_capacity_in(cap, alloc) } }