From 6027182328c341e672b58c820777941814643a3b Mon Sep 17 00:00:00 2001 From: Benoît du Garreau Date: Wed, 31 Mar 2021 17:04:14 +0200 Subject: Fix a layout miscalculation in alloc::RawVec --- library/alloc/src/raw_vec.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'library/alloc/src') diff --git a/library/alloc/src/raw_vec.rs b/library/alloc/src/raw_vec.rs index 8fa0242ca9a..0edcaa9ef76 100644 --- a/library/alloc/src/raw_vec.rs +++ b/library/alloc/src/raw_vec.rs @@ -244,9 +244,7 @@ impl RawVec { // We have an allocated chunk of memory, so we can bypass runtime // checks to get our current layout. unsafe { - let align = mem::align_of::(); - let size = mem::size_of::() * self.cap; - let layout = Layout::from_size_align_unchecked(size, align); + let layout = Layout::array::(self.cap).unwrap_unchecked(); Some((self.ptr.cast().into(), layout)) } } -- cgit 1.4.1-3-g733a5 From d3e2ffcbc69eadc63a7265a7902739080b9338de Mon Sep 17 00:00:00 2001 From: Benoît du Garreau Date: Mon, 2 Aug 2021 11:34:37 +0200 Subject: Fix `shrink` and `capacity_from_bytes` --- library/alloc/src/raw_vec.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'library/alloc/src') diff --git a/library/alloc/src/raw_vec.rs b/library/alloc/src/raw_vec.rs index 0edcaa9ef76..ae1f8c0e513 100644 --- a/library/alloc/src/raw_vec.rs +++ b/library/alloc/src/raw_vec.rs @@ -425,10 +425,11 @@ impl RawVec { assert!(cap <= self.capacity(), "Tried to shrink to a larger capacity"); let (ptr, layout) = if let Some(mem) = self.current_memory() { mem } else { return Ok(()) }; - let new_size = cap * mem::size_of::(); let ptr = unsafe { - let new_layout = Layout::from_size_align_unchecked(new_size, layout.align()); + // `Layout::array` cannot overflow here because it would have + // owerflown earlier when capacity was larger. + let new_layout = Layout::array::(cap).unwrap_unchecked(); self.alloc .shrink(ptr, layout, new_layout) .map_err(|_| AllocError { layout: new_layout, non_exhaustive: () })? -- cgit 1.4.1-3-g733a5 From fe7d7c20046c59ee91d763f5ab70aff42a73bca7 Mon Sep 17 00:00:00 2001 From: Alphyr <47725341+a1phyr@users.noreply.github.com> Date: Sat, 7 Aug 2021 18:57:48 +0200 Subject: Fix typo Co-authored-by: Josh Triplett --- library/alloc/src/raw_vec.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'library/alloc/src') diff --git a/library/alloc/src/raw_vec.rs b/library/alloc/src/raw_vec.rs index ae1f8c0e513..0ce2beb63d6 100644 --- a/library/alloc/src/raw_vec.rs +++ b/library/alloc/src/raw_vec.rs @@ -428,7 +428,7 @@ impl RawVec { let ptr = unsafe { // `Layout::array` cannot overflow here because it would have - // owerflown earlier when capacity was larger. + // overflowed earlier when capacity was larger. let new_layout = Layout::array::(cap).unwrap_unchecked(); self.alloc .shrink(ptr, layout, new_layout) -- cgit 1.4.1-3-g733a5