about summary refs log tree commit diff
path: root/library/core/src/slice/raw.rs
diff options
context:
space:
mode:
authorBen Kimock <kimockb@gmail.com>2022-10-20 00:30:00 -0400
committerBen Kimock <kimockb@gmail.com>2022-10-20 00:30:00 -0400
commitcfcb0a2135da6d4bdbf5f28806dea0cc70c5b6c5 (patch)
tree1d86716173966df3b9062ed7184389b31aadc5fd /library/core/src/slice/raw.rs
parent57781b24c54f9548722927ba88c343ff28da94ce (diff)
downloadrust-cfcb0a2135da6d4bdbf5f28806dea0cc70c5b6c5.tar.gz
rust-cfcb0a2135da6d4bdbf5f28806dea0cc70c5b6c5.zip
Use a faster allocation size check in slice::from_raw_parts
Diffstat (limited to 'library/core/src/slice/raw.rs')
-rw-r--r--library/core/src/slice/raw.rs10
1 files changed, 5 insertions, 5 deletions
diff --git a/library/core/src/slice/raw.rs b/library/core/src/slice/raw.rs
index 3c5abd215a4..dace748fed4 100644
--- a/library/core/src/slice/raw.rs
+++ b/library/core/src/slice/raw.rs
@@ -1,7 +1,9 @@
 //! Free functions to create `&[T]` and `&mut [T]`.
 
 use crate::array;
-use crate::intrinsics::{assert_unsafe_precondition, is_aligned_and_not_null};
+use crate::intrinsics::{
+    assert_unsafe_precondition, is_aligned_and_not_null, is_valid_allocation_size,
+};
 use crate::ops::Range;
 use crate::ptr;
 
@@ -91,8 +93,7 @@ pub const unsafe fn from_raw_parts<'a, T>(data: *const T, len: usize) -> &'a [T]
     // SAFETY: the caller must uphold the safety contract for `from_raw_parts`.
     unsafe {
         assert_unsafe_precondition!([T](data: *const T, len: usize) =>
-            is_aligned_and_not_null(data)
-                && crate::mem::size_of::<T>().saturating_mul(len) <= isize::MAX as usize
+            is_aligned_and_not_null(data) && is_valid_allocation_size::<T>(len)
         );
         &*ptr::slice_from_raw_parts(data, len)
     }
@@ -135,8 +136,7 @@ pub const unsafe fn from_raw_parts_mut<'a, T>(data: *mut T, len: usize) -> &'a m
     // SAFETY: the caller must uphold the safety contract for `from_raw_parts_mut`.
     unsafe {
         assert_unsafe_precondition!([T](data: *mut T, len: usize) =>
-            is_aligned_and_not_null(data)
-                && crate::mem::size_of::<T>().saturating_mul(len) <= isize::MAX as usize
+            is_aligned_and_not_null(data) && is_valid_allocation_size::<T>(len)
         );
         &mut *ptr::slice_from_raw_parts_mut(data, len)
     }