From 13e98c301a8b436b8e1da063ccf1844385d4d274 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 26 Feb 2015 12:13:17 +0100 Subject: [PATCH] - added NULL pointer checks to AActor::RemoveInventory to prevent items that destroy their owner in their use state from crashing the engine. --- src/p_mobj.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 1d933a22b..0137ce9e0 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -575,20 +575,23 @@ void AActor::AddInventory (AInventory *item) // //============================================================================ -void AActor::RemoveInventory (AInventory *item) +void AActor::RemoveInventory(AInventory *item) { AInventory *inv, **invp; - invp = &item->Owner->Inventory; - for (inv = *invp; inv != NULL; invp = &inv->Inventory, inv = *invp) + if (item != NULL && item->Owner != NULL) // can happen if the owner was destroyed by some action from an item's use state. { - if (inv == item) + invp = &item->Owner->Inventory; + for (inv = *invp; inv != NULL; invp = &inv->Inventory, inv = *invp) { - *invp = item->Inventory; - item->DetachFromOwner (); - item->Owner = NULL; - item->Inventory = NULL; - break; + if (inv == item) + { + *invp = item->Inventory; + item->DetachFromOwner(); + item->Owner = NULL; + item->Inventory = NULL; + break; + } } } }