From: Bennet Bleßmann Date: Sat, 3 Aug 2024 17:36:05 +0000 (+0200) Subject: prevent accidental double free by checking tag before drop X-Git-Tag: v0.10.0~125^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=9e8d8aa19e4a2512042e8d1221ec9a0438c22e16;p=scryer-prolog.git prevent accidental double free by checking tag before drop --- 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()) } + } } }