diff options
| author | Simon Sapin <simon.sapin@exyr.org> | 2019-10-16 20:32:58 +0200 |
|---|---|---|
| committer | Simon Sapin <simon.sapin@exyr.org> | 2019-10-16 20:32:58 +0200 |
| commit | ca1cfdab78d1966efd492cd550a3684f3b95527c (patch) | |
| tree | 5ebfb66f91a01543d3e24eb8d2f1598decaf054b /src/liballoc | |
| parent | 23d3ff1b9756c768c4412dcd1d80cff0617fd5c5 (diff) | |
| download | rust-ca1cfdab78d1966efd492cd550a3684f3b95527c.tar.gz rust-ca1cfdab78d1966efd492cd550a3684f3b95527c.zip | |
Uninitialized boxes: check for zero-size allocation based on Layout::size
Diffstat (limited to 'src/liballoc')
| -rw-r--r-- | src/liballoc/boxed.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/liballoc/boxed.rs b/src/liballoc/boxed.rs index 2693a64e13b..567b8ea7224 100644 --- a/src/liballoc/boxed.rs +++ b/src/liballoc/boxed.rs @@ -141,10 +141,10 @@ impl<T> Box<T> { /// ``` #[unstable(feature = "new_uninit", issue = "63291")] pub fn new_uninit() -> Box<mem::MaybeUninit<T>> { - if mem::size_of::<T>() == 0 { + let layout = alloc::Layout::new::<mem::MaybeUninit<T>>(); + if layout.size() == 0 { return Box(NonNull::dangling().into()) } - let layout = alloc::Layout::new::<mem::MaybeUninit<T>>(); let ptr = unsafe { Global.alloc(layout) .unwrap_or_else(|_| alloc::handle_alloc_error(layout)) @@ -184,10 +184,10 @@ impl<T> Box<[T]> { /// ``` #[unstable(feature = "new_uninit", issue = "63291")] pub fn new_uninit_slice(len: usize) -> Box<[mem::MaybeUninit<T>]> { - let ptr = if mem::size_of::<T>() == 0 || len == 0 { + let layout = alloc::Layout::array::<mem::MaybeUninit<T>>(len).unwrap(); + let ptr = if layout.size() == 0 { NonNull::dangling() } else { - let layout = alloc::Layout::array::<mem::MaybeUninit<T>>(len).unwrap(); unsafe { Global.alloc(layout) .unwrap_or_else(|_| alloc::handle_alloc_error(layout)) |
