From ea041a40f9852ac706d0d4f1e201af384bd19a11 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bennet=20Ble=C3=9Fmann?= Date: Sat, 6 Jul 2024 17:43:13 +0200 Subject: [PATCH] if UB un IndexPtr ArenaAllocated impl --- src/arena.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/arena.rs b/src/arena.rs index 58f321f0..fb42ac17 100644 --- a/src/arena.rs +++ b/src/arena.rs @@ -614,15 +614,17 @@ impl ArenaAllocated for IndexPtr { #[inline] fn alloc(arena: &mut Arena, value: Self) -> TypedArenaPtr { - let mut slab = Box::new(AllocSlab { + let slab = Box::new(AllocSlab { next: arena.base.take(), #[cfg(target_pointer_width = "32")] _padding: 0, header: HeaderOrIdxPtr { idx_ptr: value }, }); - let allocated_ptr = unsafe { TypedArenaPtr::new(ptr::addr_of_mut!(slab.header.idx_ptr)) }; - arena.base = Some(NonNull::new(Box::into_raw(slab)).unwrap()); + let raw_box = Box::into_raw(slab); + let allocated_ptr = + unsafe { TypedArenaPtr::new(ptr::addr_of_mut!((*raw_box).header.idx_ptr)) }; + arena.base = Some(NonNull::new(raw_box).unwrap()); allocated_ptr } } -- 2.54.0