java-topology/defects/dry/patch/CLEAN.md
russell@unturf.com e074f18ac7 python-ruby wave: cpython/mastodon defects + 8 CLEAN markers; count 668→671
cpython-0001: unittest.mock.reset_mock visited=[] O(N²) diamond traversal
mastodon-0001: OStatus Creation processed_account_ids Array#include? O(N²)
mastodon-0002: ActivityPub process_hashtag status.tags.include? O(N²) AR queries
CLEAN: dask, bottle, pyramid, alembic, dgl, synapse, dendrite, zulip
2026-03-29 19:50:42 -04:00

1.2 KiB

dry (Urho3D fork) — CWE-407 Scan Result: CLEAN

Scanned: 2026-03-29 Repo: https://github.com/nikibobi/dry (Urho3D fork)

Findings

All hot-path dedup structures in dry use HashSet<T> or HashMap<K,V>:

Hot Path Container O()
Renderer::DrawDebugGeometry processedGeometries/processedLights HashSet<Drawable*> / HashSet<Light*> O(1)
AnimationController::Update processedAnimations HashSet<StringHash> O(1)
PhysicsWorld currentCollisions / previousCollisions HashMap<Pair<...>, ManifoldPair> O(1)
Scene node/component registries HashMap<unsigned, Node*> O(1)

PODVector<RigidBody*>::Contains in PhysicsQueryCallback::addSingleResult is O(R) per contact point, but R is bounded by the number of bodies in the query volume (typically < 10 in practice) and the method is not called per-frame unless the game explicitly issues repeated overlap queries.

Node tag lookup HasTag() uses StringVector::Contains (O(T)), but T (tags per node) is typically 1-3. Scene-level GetNodesWithTag() is backed by HashMap<StringHash, PODVector<Node*>> — O(1) tag lookup.

No qualifying O(N²) defects found in any hot path.

Verdict: CLEAN