From 096d2bb7724c9c4ab5b2ca4ff438e889ad04bd86 Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Sat, 19 Mar 2022 19:41:15 +0000 Subject: [PATCH] LibJS/Bytecode: Make construct Call throw if callee isn't a constructor --- Userland/Libraries/LibJS/Bytecode/Op.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibJS/Bytecode/Op.cpp b/Userland/Libraries/LibJS/Bytecode/Op.cpp index 5e8d6183be..4393ee3ba2 100644 --- a/Userland/Libraries/LibJS/Bytecode/Op.cpp +++ b/Userland/Libraries/LibJS/Bytecode/Op.cpp @@ -411,9 +411,13 @@ ThrowCompletionOr JumpUndefined::execute_impl(Bytecode::Interpreter& inter ThrowCompletionOr Call::execute_impl(Bytecode::Interpreter& interpreter) const { auto callee = interpreter.reg(m_callee); - if (!callee.is_function()) + + if (m_type == CallType::Call && !callee.is_function()) return interpreter.vm().throw_completion(interpreter.global_object(), ErrorType::IsNotA, callee.to_string_without_side_effects(), "function"sv); + if (m_type == CallType::Construct && !callee.is_constructor()) + return interpreter.vm().throw_completion(interpreter.global_object(), ErrorType::IsNotA, callee.to_string_without_side_effects(), "constructor"sv); + auto& function = callee.as_function(); auto this_value = interpreter.reg(m_this_value);