java-topology/defects/openfoam-0001/patch/openfoam-0001.patch

82 lines
3.5 KiB
Diff

# UNDF: UNDF-2026-000000900
--- a/src/lagrangian/molecularDynamics/moleculeCloud/moleculeCloud.C
+++ b/src/lagrangian/molecularDynamics/moleculeCloud/moleculeCloud.C
@@ -274,7 +274,9 @@
{
- DynamicList<molecule*> 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<molecule*> for O(1) membership checks.
+ HashSet<molecule*> 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<molecule*>, 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);
}
}