From 959693f1e5fd8b504f0690a34b8da4673d44f8b2 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sat, 6 Oct 2018 18:32:39 +0200 Subject: [PATCH 1/2] ensure that we cannot use (wrapping_)offset to go from an int ptr to a real ptr --- tests/compile-fail/ptr_offset_int_plus_ptr.rs | 9 +++++++++ tests/compile-fail/ptr_wrapping_offset_int_plus_ptr.rs | 8 ++++++++ 2 files changed, 17 insertions(+) create mode 100644 tests/compile-fail/ptr_offset_int_plus_ptr.rs create mode 100644 tests/compile-fail/ptr_wrapping_offset_int_plus_ptr.rs diff --git a/tests/compile-fail/ptr_offset_int_plus_ptr.rs b/tests/compile-fail/ptr_offset_int_plus_ptr.rs new file mode 100644 index 00000000000..a3895a71b1b --- /dev/null +++ b/tests/compile-fail/ptr_offset_int_plus_ptr.rs @@ -0,0 +1,9 @@ +// error-pattern: pointer value as raw bytes + +fn main() { + let ptr = &mut *Box::new(0u32) as *mut u32; + // Can't start with an integer pointer and get to something usable + unsafe { + let _ = (1 as *mut u8).offset(ptr as isize); + } +} diff --git a/tests/compile-fail/ptr_wrapping_offset_int_plus_ptr.rs b/tests/compile-fail/ptr_wrapping_offset_int_plus_ptr.rs new file mode 100644 index 00000000000..0f53c1d8951 --- /dev/null +++ b/tests/compile-fail/ptr_wrapping_offset_int_plus_ptr.rs @@ -0,0 +1,8 @@ +// error-pattern: pointer value as raw bytes + +fn main() { + let ptr = &mut *Box::new(0u32) as *mut u32; + // Can't start with an integer pointer and get to something usable + let ptr = (1 as *mut u8).wrapping_offset(ptr as isize); + let _ = unsafe { *ptr }; +} From 59eb3dbdae487f67d81c2e5d46dcbd636c9d0cf9 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 7 Oct 2018 10:35:34 +0200 Subject: [PATCH 2/2] use Box::into_raw --- tests/compile-fail/ptr_offset_int_plus_ptr.rs | 2 +- tests/compile-fail/ptr_wrapping_offset_int_plus_ptr.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/compile-fail/ptr_offset_int_plus_ptr.rs b/tests/compile-fail/ptr_offset_int_plus_ptr.rs index a3895a71b1b..b4554893580 100644 --- a/tests/compile-fail/ptr_offset_int_plus_ptr.rs +++ b/tests/compile-fail/ptr_offset_int_plus_ptr.rs @@ -1,7 +1,7 @@ // error-pattern: pointer value as raw bytes fn main() { - let ptr = &mut *Box::new(0u32) as *mut u32; + let ptr = Box::into_raw(Box::new(0u32)); // Can't start with an integer pointer and get to something usable unsafe { let _ = (1 as *mut u8).offset(ptr as isize); diff --git a/tests/compile-fail/ptr_wrapping_offset_int_plus_ptr.rs b/tests/compile-fail/ptr_wrapping_offset_int_plus_ptr.rs index 0f53c1d8951..b3dda27fad1 100644 --- a/tests/compile-fail/ptr_wrapping_offset_int_plus_ptr.rs +++ b/tests/compile-fail/ptr_wrapping_offset_int_plus_ptr.rs @@ -1,7 +1,7 @@ // error-pattern: pointer value as raw bytes fn main() { - let ptr = &mut *Box::new(0u32) as *mut u32; + let ptr = Box::into_raw(Box::new(0u32)); // Can't start with an integer pointer and get to something usable let ptr = (1 as *mut u8).wrapping_offset(ptr as isize); let _ = unsafe { *ptr };