From 218ad8f574317846b591784c4c60af07aa72730d Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Fri, 18 Aug 2023 06:00:44 +0200 Subject: [PATCH] Fix /custom-elements/when-defined-reentry-crash.html (#30121) The problem is a double-borrow of the `when_defined` member. The fix is to let go of the borrow before resolving the promise which will eventually try to borrow `when_defined` again. Fixes #30120. --- components/script/dom/customelementregistry.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs index df458ec90c3..ba36a2d30df 100644 --- a/components/script/dom/customelementregistry.rs +++ b/components/script/dom/customelementregistry.rs @@ -397,7 +397,8 @@ impl CustomElementRegistryMethods for CustomElementRegistry { } // Step 16, 16.3 - if let Some(promise) = self.when_defined.borrow_mut().remove(&name) { + let promise = self.when_defined.borrow_mut().remove(&name); + if let Some(promise) = promise { unsafe { rooted!(in(*cx) let mut constructor = UndefinedValue()); definition