2 KiB
2 KiB
Nim — CWE-407 Diamond Recursion Scan: CLEAN
Scan Date
2026-03-29
Targets Checked
1. Object type inheritance (isObjectSubtype, sigmatch.nim)
- File:
compiler/sigmatch.nim, lines 619–636 - Mechanism: Single-inheritance
while t != nil: t = t.baseClasschain. Nim objects have exactly one parent — no diamond possible. - Result: CLEAN (single-parent chain, O(D) linear).
2. Concept matching (concepts.nim)
- File:
compiler/concepts.nim - Guard:
MatchConcarriesmarker: initHashSet[ConceptTypePair]()— used to prevent infinite recursion in mutual-concept matching. conceptsMatch: Compares concept bodies structurally;processConceptuses the HashSet marker for cycle detection.- Result: CLEAN — HashSet visited guard present.
3. Module dependency tracking (deps.nim)
- File:
compiler/deps.nim, lines 282–286 - Guard:
seenFiles = initHashSet[string]()withcontainsOrIncl. - Result: CLEAN.
4. Type traversal in types.nim
- File:
compiler/types.nim, line 1352 - Uses
seen = initIntSet()withcontainsOrIncl(seen, result.id)for type alias chain traversal. - Result: CLEAN.
5. AST cycle detection (trees.nim)
- File:
compiler/trees.nim,cyclicTreeAux - Uses
visited: seq[PNode](a stack, not a set) with linearfor v in visited: if v == ncheck — O(V) per node, O(V²) total. - However: This is DFS stack semantics (push on enter, pop on exit), correct for
cycle detection in trees.
cyclicTreeis only called fromvm.nimafter macro expansion to validate the output — not in a hot compilation path. - N is bounded by macro output AST size, not by type hierarchy depth. Not a diamond recursion issue.
- Result: Not CWE-407 (bounded, correct algorithm for stack-based DFS).
Conclusion
No CWE-407 diamond recursion defects found in Nim. Object inheritance is single-parent; concept matching uses a HashSet guard; module dependency tracking uses a HashSet.