## Diamond Recursion Scan — CLEAN **Scan date:** 2026-03-29 **Pattern:** Recursive cycle/dependency check without visited set (CWE-407 diamond recursion, O(2^D)) ### Files examined - `src/Composer/DependencyResolver/Solver.php` — SAT solver core - `src/Composer/DependencyResolver/PoolBuilder.php` — dependency pool construction - `src/Composer/DependencyResolver/PoolOptimizer.php` — pool optimization - `src/Composer/DependencyResolver/Request.php` — dependency request types - `src/Composer/Package/` — package dependency structures ### Findings **Solver:** Uses a DPLL-based SAT solver (via branch/backtrack state machine in `$this->branches`). Does not use recursive graph traversal for dependency resolution. No diamond recursion possible. CLEAN. **PoolBuilder:** Iterates dependency sets iteratively (while loops), not recursively. CLEAN. **Package layer:** Dependencies are stored as flat arrays; traversal is left to the solver. No recursive diamond-pattern code found. CLEAN. Note: `composer-0001` and `composer-0002` cover pre-existing CWE-407 defects in filter/dependent list operations. ### Verdict: CLEAN — no diamond recursion CWE-407 found