diff --git a/Userland/Libraries/LibJS/Runtime/Reference.cpp b/Userland/Libraries/LibJS/Runtime/Reference.cpp index 128c25ee06..f34e0fcce0 100644 --- a/Userland/Libraries/LibJS/Runtime/Reference.cpp +++ b/Userland/Libraries/LibJS/Runtime/Reference.cpp @@ -16,6 +16,11 @@ void Reference::put_value(GlobalObject& global_object, Value value) { auto& vm = global_object.vm(); + if (!is_valid_reference()) { + vm.throw_exception(global_object, ErrorType::InvalidLeftHandAssignment); + return; + } + if (is_unresolvable()) { if (m_strict) { throw_reference_error(global_object); @@ -88,7 +93,7 @@ void Reference::throw_reference_error(GlobalObject& global_object) const // 6.2.4.5 GetValue ( V ), https://tc39.es/ecma262/#sec-getvalue Value Reference::get_value(GlobalObject& global_object, bool throw_if_undefined) const { - if (is_unresolvable()) { + if (!is_valid_reference() || is_unresolvable()) { throw_reference_error(global_object); return {}; } diff --git a/Userland/Libraries/LibJS/Runtime/Reference.h b/Userland/Libraries/LibJS/Runtime/Reference.h index 8d3fa3e260..7d24a8b0bf 100644 --- a/Userland/Libraries/LibJS/Runtime/Reference.h +++ b/Userland/Libraries/LibJS/Runtime/Reference.h @@ -109,6 +109,8 @@ public: String to_string() const; + bool is_valid_reference() const { return m_name.is_valid(); } + private: void throw_reference_error(GlobalObject&) const;