UNDF-2026-000000468: three.js src/nodes/core/Node.js:351 traverse() recurses without a visited set; on shared-node (diamond) TSL shader graphs yields 2^D callback invocations. D=10 gives 4093× overhead. Fix: add optional visited Set parameter, default new Set() at root call. Unit test: 10/10 PASS (ThreeJSNodeTraverseTest.java) CLEAN markers written for: webpack (visitedModules WeakSet throughout), valhalla (Dijkstra+BFS, no recursive DAG traversal), traefik (traverse() has proper visited map), wasmer (petgraph+BTreeMap), wasmtime (SCC algorithms).
13 lines
701 B
Markdown
13 lines
701 B
Markdown
## Diamond Recursion Scan (wasmer) — CLEAN
|
|
|
|
**Scan date:** 2026-03-29
|
|
**Pattern:** Recursive cycle/dependency check without visited set (CWE-407 diamond recursion, O(2^D))
|
|
|
|
### Files examined
|
|
|
|
- `lib/wasix/src/runtime/resolver/resolve.rs` — `discover_dependencies()` — iterative BFS using `BTreeMap<PackageId, NodeIndex>` as visited map + `VecDeque` queue. CLEAN.
|
|
- Uses `petgraph::DiGraph` for the dependency graph and `petgraph::algo::toposort` for cycle detection. CLEAN.
|
|
|
|
### Verdict: CLEAN — no diamond recursion CWE-407 found in wasmer
|
|
|
|
Wasmer's package dependency resolver uses petgraph with proper BTreeMap-based node dedup. All dependency graph traversal is iterative, not recursive.
|