From de3e6cc75c84f45beed24042e093647ea96d56a2 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Thu, 27 Oct 2022 23:23:03 +0100 Subject: [PATCH] LibWeb: Ensure dom_exception_to_throw_completion() always takes a VM The combination of template + auto&& parameter + constexpr if statements allowed one caller to pass in a GlobalObject, without the compiler complaining. --- Userland/Libraries/LibWeb/Bindings/ExceptionOrUtils.h | 4 ++-- .../Libraries/LibWeb/Bindings/LegacyPlatformObject.cpp | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Userland/Libraries/LibWeb/Bindings/ExceptionOrUtils.h b/Userland/Libraries/LibWeb/Bindings/ExceptionOrUtils.h index ef888bbc9e..e96c82a73c 100644 --- a/Userland/Libraries/LibWeb/Bindings/ExceptionOrUtils.h +++ b/Userland/Libraries/LibWeb/Bindings/ExceptionOrUtils.h @@ -57,7 +57,7 @@ struct ExtractExceptionOrValueType> { using Type = JS::Value; }; -ALWAYS_INLINE JS::Completion dom_exception_to_throw_completion(auto&& vm, auto&& exception) +ALWAYS_INLINE JS::Completion dom_exception_to_throw_completion(JS::VM& vm, auto&& exception) { return exception.visit( [&](WebIDL::SimpleException const& exception) { @@ -91,7 +91,7 @@ using ExtractExceptionOrValueType = typename Detail::ExtractExceptionOrValueType // ExceptionOr: JS::ThrowCompletionOr // T: JS::ThrowCompletionOr template()()), typename Ret = Conditional && !IsVoid && !IsThrowCompletionOr, T, ExtractExceptionOrValueType>> -JS::ThrowCompletionOr throw_dom_exception_if_needed(auto&& vm, F&& fn) +JS::ThrowCompletionOr throw_dom_exception_if_needed(JS::VM& vm, F&& fn) { if constexpr (IsExceptionOr) { auto&& result = fn(); diff --git a/Userland/Libraries/LibWeb/Bindings/LegacyPlatformObject.cpp b/Userland/Libraries/LibWeb/Bindings/LegacyPlatformObject.cpp index ae53ec4513..407feac4ce 100644 --- a/Userland/Libraries/LibWeb/Bindings/LegacyPlatformObject.cpp +++ b/Userland/Libraries/LibWeb/Bindings/LegacyPlatformObject.cpp @@ -64,8 +64,7 @@ JS::ThrowCompletionOr LegacyPlatformObject::is_named_property_exposed_on_o JS::ThrowCompletionOr> LegacyPlatformObject::legacy_platform_object_get_own_property_for_get_own_property_slot(JS::PropertyKey const& property_name) const { - - [[maybe_unused]] auto& global_object = this->global_object(); + auto& vm = this->vm(); if (property_name.is_number()) { // 1. Let index be the result of calling ToUint32(P). @@ -75,7 +74,7 @@ JS::ThrowCompletionOr> LegacyPlatformObject::le // FIXME: Can this throw? if (is_supported_property_index(index)) { - auto value = TRY(throw_dom_exception_if_needed(global_object, [&] { return item_value(index); })); + auto value = TRY(throw_dom_exception_if_needed(vm, [&] { return item_value(index); })); // 5. Let desc be a newly created Property Descriptor with no fields. JS::PropertyDescriptor descriptor; @@ -102,7 +101,7 @@ JS::ThrowCompletionOr> LegacyPlatformObject::le // FIXME: It's unfortunate that this is done twice, once in is_named_property_exposed_on_object and here. auto property_name_string = property_name.to_string(); - auto value = TRY(throw_dom_exception_if_needed(global_object, [&] { return named_item_value(property_name_string); })); + auto value = TRY(throw_dom_exception_if_needed(vm, [&] { return named_item_value(property_name_string); })); // 5. Let desc be a newly created Property Descriptor with no fields. JS::PropertyDescriptor descriptor;