From 3fdad563e2a845f356482d8917aba062cde30f81 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Mon, 7 Jun 2021 23:07:13 +0100 Subject: [PATCH] LibJS: Never omit setter/getter attributes in accessor descriptor object These should not be omitted, an accessor with out getter or setter still yields an undefined for the attribute in its descriptor object. --- Userland/Libraries/LibJS/Runtime/Object.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Userland/Libraries/LibJS/Runtime/Object.cpp b/Userland/Libraries/LibJS/Runtime/Object.cpp index e6a4816da6..2a21fd51f4 100644 --- a/Userland/Libraries/LibJS/Runtime/Object.cpp +++ b/Userland/Libraries/LibJS/Runtime/Object.cpp @@ -434,17 +434,14 @@ Value Object::get_own_property_descriptor_object(const PropertyName& property_na descriptor_object->define_property(vm.names.writable, Value(descriptor.attributes.is_writable())); if (vm.exception()) return {}; - } else if (descriptor.is_accessor_descriptor()) { - if (descriptor.getter) { - descriptor_object->define_property(vm.names.get, Value(descriptor.getter)); - if (vm.exception()) - return {}; - } - if (descriptor.setter) { - descriptor_object->define_property(vm.names.set, Value(descriptor.setter)); - if (vm.exception()) - return {}; - } + } else { + VERIFY(descriptor.is_accessor_descriptor()); + descriptor_object->define_property(vm.names.get, descriptor.getter ? Value(descriptor.getter) : js_undefined()); + if (vm.exception()) + return {}; + descriptor_object->define_property(vm.names.set, descriptor.setter ? Value(descriptor.setter) : js_undefined()); + if (vm.exception()) + return {}; } descriptor_object->define_property(vm.names.enumerable, Value(descriptor.attributes.is_enumerable())); if (vm.exception())