]> git.kaiwu.me - njs.git/commitdiff
Fixed handing of accessor descriptors in Object.freeze().
authorAlexander Borisov <alexander.borisov@nginx.com>
Wed, 11 Sep 2019 16:46:30 +0000 (19:46 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Wed, 11 Sep 2019 16:46:30 +0000 (19:46 +0300)
This closes #211 issue on GitHub.

src/njs_object.c
src/test/njs_unit_test.c

index e09d1e13fa07579f96efce8a893b77f21409e950..961ba1f72de058725b5d6dbfc04e3191014ee762 100644 (file)
@@ -1345,7 +1345,10 @@ njs_object_freeze(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
             break;
         }
 
-        prop->writable = 0;
+        if (!njs_is_accessor_descriptor(prop)) {
+            prop->writable = 0;
+        }
+
         prop->configurable = 0;
     }
 
index eabcd836c7e8dec20b7aab7762f82ad057cb0565..7aa4638d446325a2d0060c63b9487a997e679420 100644 (file)
@@ -10849,6 +10849,17 @@ static njs_unit_test_t  njs_test[] =
     { njs_str("var r = Object.freeze(new RegExp('')); r.a = 1"),
       njs_str("TypeError: Cannot add property \"a\", object is not extensible") },
 
+    { njs_str("var o = Object.freeze({ get x() { return 10; } }); o.x"),
+      njs_str("10") },
+
+    { njs_str("var o = Object.freeze({ get x() { return 10; } });"
+              "Object.getOwnPropertyDescriptors(o).x.get"),
+      njs_str("[object Function]") },
+
+    { njs_str("var o = Object.freeze({ get x() { return 10; } });"
+              "Object.getOwnPropertyDescriptor(o, 'x').writable"),
+      njs_str("undefined") },
+
     { njs_str("Object.isFrozen({a:1})"),
       njs_str("false") },