浏览代码

LibWeb: Recompute targetStep during "apply the history step"

This is an ad-hoc change to account for the fact that we may run
arbitrary code while waiting for the tasks in this function to complete.

I don't have a way to reproduce it, but I've seen trouble caused by
navigables disappearing, which causes the history step numbers to be
disturbed.
Andreas Kling 9 月之前
父节点
当前提交
ac48222ed7
共有 1 个文件被更改,包括 4 次插入0 次删除
  1. 4 0
      Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp

+ 4 - 0
Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp

@@ -704,6 +704,10 @@ TraversableNavigable::HistoryStepResult TraversableNavigable::apply_the_history_
         if (navigable->has_been_destroyed())
             continue;
 
+        // AD-HOC: We re-compute targetStep here, since it might have changed since the last time we computed it.
+        //         This can happen if navigables are destroyed while we wait for tasks to complete.
+        target_step = get_the_used_step(step);
+
         // 7. Let (scriptHistoryLength, scriptHistoryIndex) be the result of getting the history object length and index given traversable and targetStep.
         auto history_object_length_and_index = get_the_history_object_length_and_index(target_step);
         auto script_history_length = history_object_length_and_index.script_history_length;