From 079a69396a85e568bba7fe563bd3c1d776145bdf Mon Sep 17 00:00:00 2001 From: Emilie Burgun Date: Fri, 31 Jan 2025 15:12:54 +0100 Subject: [PATCH] Add debug asserts to UntypedArenaPtr::build_with, ::get_tag and raw_ptr_as_cell! These two functions are pretty unsafe, but having these assertions makes it easier to catch UB in testing. --- src/macros.rs | 1 + src/types.rs | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/macros.rs b/src/macros.rs index 30a863ca..7778c89e 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -175,6 +175,7 @@ macro_rules! raw_ptr_as_cell { // TODO use <*{const,mut} _>::addr instead of as when the strict_provenance feature is stable rust-lang/rust#95228 // we might need <*{const,mut} _>::expose_provenance for strict provenance, dependening on how we recreate a pointer later let ptr : *const _ = $ptr; + debug_assert!(!$ptr.is_null()); HeapCellValue::from_ptr_addr(ptr as usize) }}; } diff --git a/src/types.rs b/src/types.rs index 49ff0a6e..d68daac7 100644 --- a/src/types.rs +++ b/src/types.rs @@ -656,6 +656,7 @@ pub struct UntypedArenaPtr { impl UntypedArenaPtr { #[inline(always)] pub fn build_with(ptr: usize) -> Self { + debug_assert!(ptr != 0); UntypedArenaPtr::new().with_ptr(ptr as u64) } } @@ -698,6 +699,7 @@ impl UntypedArenaPtr { #[inline] pub fn get_tag(self) -> ArenaHeaderTag { unsafe { + debug_assert!(!self.get_ptr().is_null()); let header = *(self.get_ptr() as *const ArenaHeader); header.get_tag() } -- 2.54.0