mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 09:30:24 +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
Notes:
sideshowbarker
2024-07-17 22:55:25 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/dbca63a1db Pull-request: https://github.com/SerenityOS/serenity/pull/22147
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.
|
||||
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.
|
||||
|
|
Loading…
Reference in a new issue