From 7ece35defee53e608dfafb4b8788e5eff73533f1 Mon Sep 17 00:00:00 2001 From: Vegard Kippe Date: Fri, 15 Nov 2024 13:52:14 +0100 Subject: [PATCH] Avoid potential segfault due to invalid vector.end() after erase() --- opm/simulators/wells/GasLiftStage2.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/opm/simulators/wells/GasLiftStage2.cpp b/opm/simulators/wells/GasLiftStage2.cpp index 176b2efd9..1c033215e 100644 --- a/opm/simulators/wells/GasLiftStage2.cpp +++ b/opm/simulators/wells/GasLiftStage2.cpp @@ -504,11 +504,14 @@ recalculateGradientAndUpdateData_(GradPairItr& grad_itr, updateGradVector_(name, other_grads, grad->grad); } else { - for (auto it = other_grads.begin(); it != other_grads.end(); it++) { - if (it->first == name) { - other_grads.erase(it); - deleteGrad_(name, !increase); - } + auto new_end = std::remove_if(other_grads.begin(), other_grads.end(), [&name](const GradPair& pair) + { + return (name==pair.first); + } + ); + if (new_end != other_grads.end()) { + this->deleteGrad_(name, !increase); + other_grads.erase(new_end, other_grads.end()); } } }