Parcourir la source

LibJS: Throw when delete-ing a non-configurable property in strict mode

Idan Horowitz il y a 4 ans
Parent
commit
07992c8da6
1 fichiers modifiés avec 4 ajouts et 1 suppressions
  1. 4 1
      Userland/Libraries/LibJS/Runtime/Object.cpp

+ 4 - 1
Userland/Libraries/LibJS/Runtime/Object.cpp

@@ -781,8 +781,11 @@ bool Object::delete_property(const PropertyName& property_name)
     auto metadata = shape().lookup(property_name.to_string_or_symbol());
     if (!metadata.has_value())
         return true;
-    if (!metadata.value().attributes.is_configurable())
+    if (!metadata.value().attributes.is_configurable()) {
+        if (vm().in_strict_mode())
+            vm().throw_exception<TypeError>(global_object(), ErrorType::DescChangeNonConfigurable, property_name.to_string_or_symbol().to_display_string());
         return false;
+    }
 
     size_t deleted_offset = metadata.value().offset;