From d6df95530538d7cb475de5fa0ccb5e6bc15887fd Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Thu, 17 Jun 2021 01:32:08 +0300 Subject: [PATCH] LibJS: Add missing to_property_key exception check in ClassExpression --- Userland/Libraries/LibJS/AST.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibJS/AST.cpp b/Userland/Libraries/LibJS/AST.cpp index 51021ef784..e109a698ec 100644 --- a/Userland/Libraries/LibJS/AST.cpp +++ b/Userland/Libraries/LibJS/AST.cpp @@ -816,20 +816,24 @@ Value ClassExpression::execute(Interpreter& interpreter, GlobalObject& global_ob if (interpreter.exception()) return {}; + auto property_key = key.to_property_key(global_object); + if (interpreter.exception()) + return {}; + auto& target = method.is_static() ? *class_constructor : class_prototype.as_object(); method_function.set_home_object(&target); switch (method.kind()) { case ClassMethod::Kind::Method: - target.define_property(key.to_property_key(global_object), method_value); + target.define_property(property_key, method_value); break; case ClassMethod::Kind::Getter: update_function_name(method_value, String::formatted("get {}", get_function_name(global_object, key))); - target.define_accessor(key.to_property_key(global_object), &method_function, nullptr, Attribute::Configurable | Attribute::Enumerable); + target.define_accessor(property_key, &method_function, nullptr, Attribute::Configurable | Attribute::Enumerable); break; case ClassMethod::Kind::Setter: update_function_name(method_value, String::formatted("set {}", get_function_name(global_object, key))); - target.define_accessor(key.to_property_key(global_object), nullptr, &method_function, Attribute::Configurable | Attribute::Enumerable); + target.define_accessor(property_key, nullptr, &method_function, Attribute::Configurable | Attribute::Enumerable); break; default: VERIFY_NOT_REACHED();