diff --git a/Libraries/LibWeb/DOM/Document.cpp b/Libraries/LibWeb/DOM/Document.cpp index 7059981717d..bb377395e43 100644 --- a/Libraries/LibWeb/DOM/Document.cpp +++ b/Libraries/LibWeb/DOM/Document.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -5160,7 +5161,14 @@ size_t Document::broadcast_active_resize_observations() auto shallowest_target_depth = NumericLimits::max(); // 2. For each observer in document.[[resizeObservers]] run these steps: - for (auto const& observer : m_resize_observers) { + + // NOTE: We make a copy of the resize observers list to avoid modifying it while iterating. + GC::MarkedVector> resize_observers(heap()); + resize_observers.ensure_capacity(m_resize_observers.size()); + for (auto const& observer : m_resize_observers) + resize_observers.append(observer); + + for (auto const& observer : resize_observers) { // 1. If observer.[[activeTargets]] slot is empty, continue. if (observer->active_targets().is_empty()) { continue;