浏览代码

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.
Linus Groh 4 年之前
父节点
当前提交
3fdad563e2
共有 1 个文件被更改,包括 8 次插入11 次删除
  1. 8 11
      Userland/Libraries/LibJS/Runtime/Object.cpp

+ 8 - 11
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())