From 29f58fe1e43361435eeadcd2501e593413d27f70 Mon Sep 17 00:00:00 2001 From: Allanis Date: Tue, 26 Nov 2013 15:43:28 +0000 Subject: [PATCH] [Fix?] FFS! Trying to delete a weapon that doesn't even exist! --- src/weapon.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/weapon.c b/src/weapon.c index 9c612eb..598bd33 100644 --- a/src/weapon.c +++ b/src/weapon.c @@ -321,7 +321,8 @@ static void weapons_updateLayer(const double dt, const WeaponLayer layer) { break; } - for(i = 0; i < (*nlayer); i++) { + i = 0; + while(i < *nlayer) { w = wlayer[i]; switch(wlayer[i]->outfit->type) { /* Most missiles behave the same. */ @@ -365,8 +366,10 @@ static void weapons_updateLayer(const double dt, const WeaponLayer layer) { break; } weapon_update(wlayer[i], dt, layer); - /* If the weapon has been deleted we are going to have to hold back one. */ - if(w != wlayer[i]) i--; + + /* Only increment if weapon wasn't deleted. */ + if(w == wlayer[i]) + i++; } } @@ -987,7 +990,13 @@ static void weapon_destroy(Weapon* w, WeaponLayer layer) { nlayer = &nwfrontLayer; break; } - for(i = 0; wlayer[i] != w; i++); /* Get us to the current posision. */ + + for(i = 0; (wlayer[i] != w) && (i < *nlayer); i++); /* Get to the current position. */ + if(i >= *nlayer) { + WARN("Trying to destroy weapon not found in stack!"); + return; + } + weapon_free(wlayer[i]); wlayer[i] = NULL; (*nlayer)--;