From 9e8d8aa19e4a2512042e8d1221ec9a0438c22e16 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bennet=20Ble=C3=9Fmann?= Date: Sat, 3 Aug 2024 19:36:05 +0200 Subject: [PATCH] prevent accidental double free by checking tag before drop --- src/arena.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/arena.rs b/src/arena.rs index a3449d44..6acb279b 100644 --- a/src/arena.rs +++ b/src/arena.rs @@ -305,8 +305,10 @@ impl TypedArenaPtr { impl>> TypedArenaPtr { pub fn drop_payload(&mut self) { - self.set_tag(ArenaHeaderTag::Dropped); - unsafe { ManuallyDrop::drop(&mut *self.as_ptr()) } + if self.get_tag() != ArenaHeaderTag::Dropped { + self.set_tag(ArenaHeaderTag::Dropped); + unsafe { ManuallyDrop::drop(&mut *self.as_ptr()) } + } } } -- 2.54.0