From 66936a0d61c1e6873100803a44ce5feb0fd48f2e Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 25 Jun 2023 16:39:30 +0200 Subject: [PATCH] LibJS/Bytecode: Fix non-string keys not being excluded in rest object By converting the excluded names to PropertyKey before filtering, we ensure that non-string keys get excluded as needed. 14 new passes on test262. :^) --- Userland/Libraries/LibJS/Bytecode/Op.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibJS/Bytecode/Op.cpp b/Userland/Libraries/LibJS/Bytecode/Op.cpp index 9515265a23..1f215e74ab 100644 --- a/Userland/Libraries/LibJS/Bytecode/Op.cpp +++ b/Userland/Libraries/LibJS/Bytecode/Op.cpp @@ -359,15 +359,16 @@ ThrowCompletionOr CopyObjectExcludingProperties::execute_impl(Bytecode::In auto to_object = Object::create(realm, realm.intrinsics().object_prototype()); - HashTable excluded_names; - for (size_t i = 0; i < m_excluded_names_count; ++i) - excluded_names.set(interpreter.reg(m_excluded_names[i])); + HashTable excluded_names; + for (size_t i = 0; i < m_excluded_names_count; ++i) { + excluded_names.set(TRY(interpreter.reg(m_excluded_names[i]).to_property_key(vm))); + } auto own_keys = TRY(from_object->internal_own_property_keys()); for (auto& key : own_keys) { - if (!excluded_names.contains(key)) { - auto property_key = TRY(key.to_property_key(vm)); + auto property_key = TRY(key.to_property_key(vm)); + if (!excluded_names.contains(property_key)) { auto property_value = TRY(from_object->get(property_key)); to_object->define_direct_property(property_key, property_value, JS::default_attributes); }