about summary refs log tree commit diff
path: root/library/std/src/sys
diff options
context:
space:
mode:
authorJubilee Young <workingjubilee@gmail.com>2024-07-23 01:12:29 -0700
committerJubilee Young <workingjubilee@gmail.com>2024-07-23 01:14:39 -0700
commited809e9b79f70719fa9807d363230e576912606b (patch)
tree45b965b6b524229518782bdef984d727f16a15e7 /library/std/src/sys
parentcefe1dcef0e21f4d0c8ea856ad61c1936dfb7913 (diff)
downloadrust-ed809e9b79f70719fa9807d363230e576912606b.tar.gz
rust-ed809e9b79f70719fa9807d363230e576912606b.zip
std: Unsafe-wrap alloc code held in-common
Diffstat (limited to 'library/std/src/sys')
-rw-r--r--library/std/src/sys/pal/common/alloc.rs19
1 files changed, 11 insertions, 8 deletions
diff --git a/library/std/src/sys/pal/common/alloc.rs b/library/std/src/sys/pal/common/alloc.rs
index 598b6db71f5..54506c32296 100644
--- a/library/std/src/sys/pal/common/alloc.rs
+++ b/library/std/src/sys/pal/common/alloc.rs
@@ -1,3 +1,4 @@
+#![forbid(unsafe_op_in_unsafe_fn)]
 use crate::alloc::{GlobalAlloc, Layout, System};
 use crate::cmp;
 use crate::ptr;
@@ -46,14 +47,16 @@ pub unsafe fn realloc_fallback(
     old_layout: Layout,
     new_size: usize,
 ) -> *mut u8 {
-    // Docs for GlobalAlloc::realloc require this to be valid:
-    let new_layout = Layout::from_size_align_unchecked(new_size, old_layout.align());
+    // SAFETY: Docs for GlobalAlloc::realloc require this to be valid
+    unsafe {
+        let new_layout = Layout::from_size_align_unchecked(new_size, old_layout.align());
 
-    let new_ptr = GlobalAlloc::alloc(alloc, new_layout);
-    if !new_ptr.is_null() {
-        let size = cmp::min(old_layout.size(), new_size);
-        ptr::copy_nonoverlapping(ptr, new_ptr, size);
-        GlobalAlloc::dealloc(alloc, ptr, old_layout);
+        let new_ptr = GlobalAlloc::alloc(alloc, new_layout);
+        if !new_ptr.is_null() {
+            let size = cmp::min(old_layout.size(), new_size);
+            ptr::copy_nonoverlapping(ptr, new_ptr, size);
+            GlobalAlloc::dealloc(alloc, ptr, old_layout);
+        }
+        new_ptr
     }
-    new_ptr
 }