# Flutter CWE-407 Scan — CLEAN ## Date 2026-03-27 ## Scope Files fetched and scanned: | File | Lines | |------|-------| | `packages/flutter/lib/src/widgets/framework.dart` | 7455 | | `packages/flutter/lib/src/rendering/object.dart` | 6759 | | `packages/flutter/lib/src/widgets/scroll_view.dart` | 2235 | | `packages/flutter/lib/src/material/app.dart` | 1271 | | `packages/flutter/lib/src/widgets/focus_manager.dart` | 2406 | | `packages/flutter/lib/src/widgets/navigator.dart` | 6450 | | `packages/flutter/lib/src/widgets/routes.dart` | 2850 | | `packages/flutter/lib/src/widgets/focus_traversal.dart` | (fetched) | | `packages/flutter/lib/src/gestures/arena.dart` | 304 | | `packages/flutter/lib/src/painting/image_cache.dart` | (fetched) | | `packages/flutter/lib/src/animation/listener_helpers.dart` | (fetched) | | `packages/flutter/lib/src/foundation/observer_list.dart` | (fetched) | | `packages/flutter/lib/src/material/theme_data.dart` | 3489 | | `packages/flutter/lib/src/rendering/layer.dart` | 3029 | ## Findings — All CLEAN ### framework.dart - `_forgottenChildren`: `HashSet` — all `.contains()` calls O(1) - `_dependencies`: `HashSet` — O(1) - `_dependents`: `HashMap` — O(1) - `_InactiveElements._elements`: `HashSet` — O(1) - `forgottenChildren` parameter in `updateChildren()`: `Set?` — O(1) - `_dirtyElements.contains()` at line 2943: inside `assert()` debug string only ### rendering/object.dart - `usedSemanticsIds`: `Set` passed through — O(1) contains ### navigator.dart - All key lookups use `Map` (containsKey) — O(1) - `phantomEntries.contains()`: type is `Set` — O(1) ### focus_manager.dart - `_listeners`: `HashedObserverList` — O(1) contains (backed by Map) - `_statusListeners`: `ObserverList` — uses `HashSet` cache for lists >= 3 items; O(1) amortised - `ancestors`: `List` cached lazily — `.contains(this)` called once (not in a loop) in `hasFocus` getter ### focus_traversal.dart - `common` set in `_ReadingOrderDirectionalGroupData._textDirectionForList()`: `Set` — O(1) - `memberAncestors`: builds flat list, no contains calls inside ### gesture arena - `_arenas.containsKey()`: Map — O(1) ### image_cache - All containsKey on Maps — O(1) ### animation/listener_helpers.dart - `_listeners`: `HashedObserverList` — O(1) - `_statusListeners`: `ObserverList` with HashSet backing — O(1) amortised ### theme_data.dart - `extensions.containsKey()`: Map — O(1) ### rendering/layer.dart - All containsKey/contains calls are on Maps or Rects (geometric contains) — O(1) ## Conclusion Flutter CLEAN for CWE-407. The Flutter team consistently uses `HashSet`, `HashedObserverList`, `HashMap`, and `Set` for all membership tracking in production hot paths. No O(N) linear scans were found inside O(N) loops. The one borderline pattern (ObserverList.contains for length < 3) is provably O(1) since it only scans up to 2 elements.