LibWeb: Don't get stuck in TreeWalker.nextNode() when current detached

This fixes a hang on https://reddit.com/

Spec bug: https://github.com/whatwg/dom/issues/1102
This commit is contained in:
Andreas Kling 2023-12-03 21:27:51 +01:00
parent f93cab7679
commit dbca63a1db
Notes: sideshowbarker 2024-07-17 22:55:25 +09:00
3 changed files with 21 additions and 0 deletions

View file

@ -0,0 +1 @@
PASS (Didn't get stuck)

View file

@ -0,0 +1,13 @@
<script src="../include.js"></script>
<script>
test(() => {
const fragment = document.createDocumentFragment();
fragment.appendChild(document.createTextNode("hello"));
const walker = document.createTreeWalker(document, 0);
walker.currentNode = fragment;
walker.nextNode();
println("PASS (Didn't get stuck)");
});
</script>

View file

@ -221,6 +221,13 @@ JS::ThrowCompletionOr<JS::GCPtr<Node>> TreeWalker::next_node()
// 4. Set temporary to temporarys parent.
temporary = temporary->parent();
// NON-STANDARD: If temporary is null, then return null.
// This prevents us from infinite looping if the current node is not connected.
// Spec bug: https://github.com/whatwg/dom/issues/1102
if (temporary == nullptr) {
return nullptr;
}
}
// 5. Set result to the result of filtering node within this.