# UNDF: UNDF-2026-000000468 --- a/src/nodes/core/Node.js +++ b/src/nodes/core/Node.js @@ -346,18 +346,22 @@ class Node extends EventDispatcher { * Can be used to traverse through the node's hierarchy. * * @param {traverseCallback} callback - A callback that is executed per node. + * @param {Set} [visited] - Internal visited set; prevents exponential + * re-visits on diamond-shaped DAGs (nodes shared by multiple parents). */ - traverse( callback ) { + traverse( callback, visited = new Set() ) { - callback( this ); + // CWE-407 fix: skip nodes already visited; was O(2^D) on diamond DAGs. + if ( visited.has( this ) ) return; + visited.add( this ); - for ( const childNode of this.getChildren() ) { + callback( this ); - childNode.traverse( callback ); + for ( const childNode of this.getChildren() ) { - } + childNode.traverse( callback, visited ); + + } }