From 7455dc4a500d96d7d4421682cd2e2929d2cd87a9 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 9 Jun 2016 14:49:55 +0200 Subject: [PATCH] Avoid an index-out-of-bounds error in ScriptMemoryFailsafe. Fixes #11059. Fixes #11400. Fixes #11481. Fixes #11671. Fixes #11682. --- components/script/dom/browsingcontext.rs | 6 ++++++ components/script/script_thread.rs | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/components/script/dom/browsingcontext.rs b/components/script/dom/browsingcontext.rs index 99c72e1e4be..1b78fb7572d 100644 --- a/components/script/dom/browsingcontext.rs +++ b/components/script/dom/browsingcontext.rs @@ -108,6 +108,12 @@ impl BrowsingContext { Root::from_ref(&self.history.borrow()[self.active_index.get()].document) } + pub fn maybe_active_document(&self) -> Option> { + self.history.borrow().get(self.active_index.get()).map(|entry| { + Root::from_ref(&*entry.document) + }) + } + pub fn active_window(&self) -> Root { Root::from_ref(self.active_document().window()) } diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 63fed6cf115..eec1853239e 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -422,8 +422,10 @@ impl<'a> Drop for ScriptMemoryFailsafe<'a> { Some(owner) => { let context = owner.browsing_context.get(); for context in context.iter() { - let window = context.active_window(); - window.clear_js_runtime_for_script_deallocation(); + if let Some(document) = context.maybe_active_document() { + let window = document.window(); + window.clear_js_runtime_for_script_deallocation(); + } } } None => (),