From bf64d7a0c125277586cfafe991d631b5e651b550 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 21 Mar 2023 18:31:07 +0000 Subject: [PATCH 1/2] K_BananaBallhogCollide: Handle use after deletes - Return early if t1 was removed - Don't call K_GetCollideAngle if t2 is removed - Only relevant here because this is one of the few contexts that causes a pre-K_GetCollideAngle deletion, other circumstances should be fine..? --- src/k_collide.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/k_collide.c b/src/k_collide.c index 1256263a8..ba1f84b5e 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -113,15 +113,25 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2) damageitem = true; } - if (damageitem) + if (damageitem && P_MobjWasRemoved(t1) == false) { - // This Item Damage - angle_t bounceangle = K_GetCollideAngle(t2, t1); + angle_t bounceangle; + if (P_MobjWasRemoved(t2) == false) + { + bounceangle = K_GetCollideAngle(t2, t1); + } + else + { + bounceangle = K_MomentumAngle(t1) + ANGLE_90; + } + + // This Item Damage S_StartSound(t1, t1->info->deathsound); P_KillMobj(t1, t2, t2, DMG_NORMAL); P_SetObjectMomZ(t1, 24*FRACUNIT, false); + P_InstaThrust(t1, bounceangle, 16*FRACUNIT); } From 5c1e063483c9322d616f57ad24e86eb146fcb0d1 Mon Sep 17 00:00:00 2001 From: toaster Date: Thu, 23 Mar 2023 22:08:55 +0000 Subject: [PATCH 2/2] K_BananaBallhogCollide: wipe T2 if it's not safe to access --- src/k_collide.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/k_collide.c b/src/k_collide.c index ba1f84b5e..e1afd637a 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -124,6 +124,7 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2) else { bounceangle = K_MomentumAngle(t1) + ANGLE_90; + t2 = NULL; // handles the arguments to P_KillMobj } // This Item Damage