If a path is extremely deep, it can cause a stack overflow.
<rdar://problem/49870751>
Created attachment 367366 [details] Patch
Comment on attachment 367366 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=367366&action=review r=me > Source/WebInspectorUI/UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:756 > + for (let i = 0; i < stack.length; ++i) { > + let {currentPath, nodeOrdinal} = stack[i]; This list is not being treated as a stack. In fact it is always growing because nothing nothing is ever removed. Normally when we have a stack approach like this we process it to exhaustion like this: let stack = [{...entry...}]; while (stack.length) { let entry = stack.pop(); // Process entry, maybe push new stack entries. } Which I think could be done here as long as you convert these two lines to: while (stack.length) { let {currentPath, nodeOridinal} = stack.pop(); ... That said, items are going to be processes on the stack in reverse order... so to get unchanging output you could iterate the edges in forward order such as: while (stack.length) { let {currentPath, nodeOridinal} = stack.unshift(); ... That should get you output that is consistent with the current code.
Created attachment 367460 [details] Patch
Comment on attachment 367460 [details] Patch Clearing flags on attachment: 367460 Committed r244308: <https://trac.webkit.org/changeset/244308>
All reviewed patches have been landed. Closing bug.