37 lines
1.8 KiB
Diff
37 lines
1.8 KiB
Diff
# UNDF: UNDF-2026-000000196
|
|
--- a/utils/misc/src/main/java/org/onlab/graph/TarjanGraphSearch.java
|
|
+++ b/utils/misc/src/main/java/org/onlab/graph/TarjanGraphSearch.java
|
|
@@ -98,6 +98,7 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>>
|
|
private int index = 0;
|
|
private final Map<V, VertexData<V>> vertexData = new HashMap<>();
|
|
private final List<VertexData<V>> visited = new ArrayList<>();
|
|
+ private final Set<VertexData<V>> visitedSet = new HashSet<>(); // CWE-407 fix
|
|
|
|
private SccResult(Graph<V, E> graph) {
|
|
this.graph = graph;
|
|
@@ -140,12 +141,14 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>>
|
|
// Adds augmentation vertexData for the specified vertex
|
|
private VertexData<V> addData(V vertex) {
|
|
VertexData<V> d = new VertexData<>(vertex, index);
|
|
vertexData.put(vertex, d);
|
|
visited.add(0, d);
|
|
+ visitedSet.add(d); // CWE-407 fix
|
|
index++;
|
|
return d;
|
|
}
|
|
|
|
// Indicates whether the given vertex has been visited
|
|
private boolean visited(VertexData data) {
|
|
- return visited.contains(data);
|
|
+ return visitedSet.contains(data); // CWE-407 fix: O(1) HashSet lookup vs O(n) ArrayList
|
|
}
|
|
|
|
// Adds a new cluster for the specified vertex
|
|
@@ -156,6 +159,7 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>>
|
|
Set<V> vertexes = new HashSet<>();
|
|
do {
|
|
nextVertexData = visited.remove(0);
|
|
+ visitedSet.remove(nextVertexData); // CWE-407 fix: keep sets in sync
|
|
vertexes.add(nextVertexData.vertex);
|
|
} while (data != nextVertexData);
|
|
return Collections.unmodifiableSet(vertexes);
|