724 B
724 B
UNDF: UNDF-2026-000000479
nomad-0004: checkstore.shim.Difference — O(current × ids)
CWE
CWE-407: Inefficient Algorithmic Complexity
Severity
MEDIUM
Location
client/serviceregistration/checks/checkstore/shim.go:152-155
Description
Difference iterates over all stored check IDs for an allocation and for
each calls slices.Contains(ids, id) — a linear scan over the input slice.
for id := range s.current[allocID] {
if !slices.Contains(ids, id) { // O(|ids|)
remove = append(remove, id)
}
}
With C stored checks and I input IDs: O(C × I).
Fix
Build a map[structs.CheckID]struct{} from ids before the loop.
Speedup
~Ix speedup where I = len(ids).