From 8fbed64db32cacffce8b16f90b30d62c4bbeab3a Mon Sep 17 00:00:00 2001 From: fgenesis Date: Thu, 16 May 2013 03:54:20 +0200 Subject: [PATCH] Fix possible crash due to unsafe shot iteration. Fixes regression introduced in 0784d1b9dff. With a std::list it was okay to create shots while iterating with an iterator, but not so with a std::vector. Now using index access, which is safe with push_back() operations. --- Aquaria/Game.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Aquaria/Game.cpp b/Aquaria/Game.cpp index cab97ab..63748d7 100644 --- a/Aquaria/Game.cpp +++ b/Aquaria/Game.cpp @@ -8407,9 +8407,9 @@ void Game::handleShotCollisions(Entity *e, bool hasShield) { BBGE_PROF(Game_handleShotCollisions); bool isRegValid=true; - for (Shot::Shots::iterator i = Shot::shots.begin(); i != Shot::shots.end(); i++) + for (size_t i = 0; i < Shot::shots.size(); ++i) { - Shot *shot = *i; + Shot *shot = Shot::shots[i]; if (shot->isActive() && isEntityCollideWithShot(e, shot) && (!hasShield || (!shot->shotData || !shot->shotData->ignoreShield))) { Vector collidePoint = e->position+e->offset; @@ -8439,9 +8439,9 @@ bool Game::isDamageTypeEnemy(DamageType dt) void Game::handleShotCollisionsSkeletal(Entity *e) { BBGE_PROF(Game_HSSKELETAL); - for (Shot::Shots::iterator i = Shot::shots.begin(); i != Shot::shots.end(); i++) + for (size_t i = 0; i < Shot::shots.size(); ++i) { - Shot *shot = *i; + Shot *shot = Shot::shots[i]; if (shot->isActive() && isEntityCollideWithShot(e, shot)) { Bone *b = collideSkeletalVsCircle(e, shot->position, shot->collideRadius); @@ -8456,9 +8456,9 @@ void Game::handleShotCollisionsSkeletal(Entity *e) void Game::handleShotCollisionsHair(Entity *e, int num) { - for (Shot::Shots::iterator i = Shot::shots.begin(); i != Shot::shots.end(); i++) + for (size_t i = 0; i < Shot::shots.size(); ++i) { - Shot *shot = *i; + Shot *shot = Shot::shots[i]; if (shot->isActive() && isEntityCollideWithShot(e, shot)) { bool b = collideHairVsCircle(e, num, shot->position, 8);