Skip to content

Commit d3e2ffc

Browse files
committed
Fix shrink and capacity_from_bytes
1 parent 6027182 commit d3e2ffc

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

library/alloc/src/raw_vec.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -425,10 +425,11 @@ impl<T, A: Allocator> RawVec<T, A> {
425425
assert!(cap <= self.capacity(), "Tried to shrink to a larger capacity");
426426

427427
let (ptr, layout) = if let Some(mem) = self.current_memory() { mem } else { return Ok(()) };
428-
let new_size = cap * mem::size_of::<T>();
429428

430429
let ptr = unsafe {
431-
let new_layout = Layout::from_size_align_unchecked(new_size, layout.align());
430+
// `Layout::array` cannot overflow here because it would have
431+
// owerflown earlier when capacity was larger.
432+
let new_layout = Layout::array::<T>(cap).unwrap_unchecked();
432433
self.alloc
433434
.shrink(ptr, layout, new_layout)
434435
.map_err(|_| AllocError { layout: new_layout, non_exhaustive: () })?

0 commit comments

Comments
 (0)