From 1b0856307976ab348027491b795997b0368551f9 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 16 Dec 2015 16:56:49 -0800 Subject: [PATCH] ParticleEffectEntityItem: fix for invalid iterator increment Was causing an assert in debug, due to calling ++ on an invalid iterator. In release this might lead to memory corruption. --- libraries/entities/src/ParticleEffectEntityItem.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 5600c85650..533b077a9c 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -595,19 +595,24 @@ void ParticleEffectEntityItem::integrateParticle(Particle& particle, float delta void ParticleEffectEntityItem::stepSimulation(float deltaTime) { // update particles between head and tail + int popCount = 0; for (Particle& particle : _particles) { particle.lifetime += deltaTime; // if particle has died. if (particle.lifetime >= _lifespan) { // move head forward - _particles.pop_front(); + popCount++; } else { // Otherwise update it integrateParticle(particle, deltaTime); } } + for (int i = 0; i < popCount; i++) { + _particles.pop_front(); + } + // emit new particles, but only if we are emmitting if (getIsEmitting() && _emitRate > 0.0f && _lifespan > 0.0f && _polarStart <= _polarFinish) {