mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:07:46 +00:00
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:
parent
f93cab7679
commit
dbca63a1db
3 changed files with 21 additions and 0 deletions
|
@ -0,0 +1 @@
|
||||||
|
PASS (Didn't get stuck)
|
|
@ -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>
|
|
@ -221,6 +221,13 @@ JS::ThrowCompletionOr<JS::GCPtr<Node>> TreeWalker::next_node()
|
||||||
|
|
||||||
// 4. Set temporary to temporary’s parent.
|
// 4. Set temporary to temporary’s parent.
|
||||||
temporary = temporary->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.
|
// 5. Set result to the result of filtering node within this.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue