# UNDF: UNDF-2026-000000900 --- a/src/lagrangian/molecularDynamics/moleculeCloud/moleculeCloud.C +++ b/src/lagrangian/molecularDynamics/moleculeCloud/moleculeCloud.C @@ -274,7 +274,9 @@ { - DynamicList molsToDelete; + // CWE-407: molsToDelete was a DynamicList scanned by findIndex() O(N) + // for each molecule pair, yielding O(pairs * D) where D = deletions. + // Fix: use HashSet for O(1) membership checks. + HashSet molsToDeleteSet; const labelListList& dil(il_.dil()); @@ -304,13 +306,13 @@ || findIndex(pot_.removalOrder(), idJ) < findIndex(pot_.removalOrder(), idI) ) { - if (findIndex(molsToDelete, molJ) == -1) + if (!molsToDeleteSet.found(molJ)) { - molsToDelete.append(molJ); + molsToDeleteSet.insert(molJ); } } - else if (findIndex(molsToDelete, molI) == -1) + else if (!molsToDeleteSet.found(molI)) { - molsToDelete.append(molI); + molsToDeleteSet.insert(molI); } } @@ -336,13 +338,13 @@ || findIndex(pot_.removalOrder(), idJ) < findIndex(pot_.removalOrder(), idI) ) { - if (findIndex(molsToDelete, molJ) == -1) + if (!molsToDeleteSet.found(molJ)) { - molsToDelete.append(molJ); + molsToDeleteSet.insert(molJ); } } - else if (findIndex(molsToDelete, molI) == -1) + else if (!molsToDeleteSet.found(molI)) { - molsToDelete.append(molI); + molsToDeleteSet.insert(molI); } } @@ -353,10 +355,10 @@ - forAll(molsToDelete, mTD) + forAllConstIter(HashSet, molsToDeleteSet, iter) { - deleteParticle(*(molsToDelete[mTD])); + deleteParticle(*iter.key()); } } @@ -419,9 +421,9 @@ { - if (findIndex(molsToDelete, molI) == -1) + if (!molsToDeleteSet.found(molI)) { - molsToDelete.append(molI); + molsToDeleteSet.insert(molI); } } else if @@ -437,9 +439,9 @@ if (molI->origId() > molJ->origId()) { - if (findIndex(molsToDelete, molI) == -1) + if (!molsToDeleteSet.found(molI)) { - molsToDelete.append(molI); + molsToDeleteSet.insert(molI); } }